mds/dev-libs/apr/files/apr-xattr-headers.patch

367 lines
14 KiB
Diff

Index: include/apr_file_xattr.h
===================================================================
--- include/apr_file_xattr.h (revision 0)
+++ include/apr_file_xattr.h (revision 0)
@@ -0,0 +1,249 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef APR_FILE_XATTR_H
+#define APR_FILE_XATTR_H
+
+/**
+ * @file apr_file_xattr.h
+ * @brief APR File Extended Attributes
+ */
+
+#include "apr.h"
+#include "apr_pools.h"
+#include "apr_tables.h"
+#include "apr_file_io.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * @defgroup apr_xattr File Extended Attribute Functions
+ * @ingroup APR
+ * @{
+ */
+
+/** When setting values, fail if the attribute already exists */
+#define APR_XATTR_CREATE 1
+
+/** When setting values, fail if the attribute does not already exist */
+#define APR_XATTR_REPLACE 2
+
+typedef struct apr_xattr_t apr_xattr_t;
+
+/**
+ * Open a context for access to the extended attributes of a file or
+ * directory specified by a path name
+ *
+ * @param new the context allocated for access to extended attributes
+ * @param pathname the path name of the file or directory
+ * @param p the pool to allocate any memory from
+ * @return the status of the operation:
+ * <PRE>
+ * APR_SUCCESS the path was opened for attribute access
+ * APR_STATUS_IS_ENOENT() the file or directory does not exist
+ * </PRE>
+ * Other operating system dependant error codes may be returned.
+ *
+ * @warning Platforms which do not implement this feature will return
+ * APR_ENOTIMPL.
+ */
+APR_DECLARE(apr_status_t) apr_xattr_open_path(apr_xattr_t **new,
+ const char *pathname,
+ apr_pool_t *p);
+
+/**
+ * Open a context for access to the extended attributes of an open file
+ *
+ * @param new the context allocated for access to extended attributes
+ * @param file the open file to access the extended attributes on
+ * @param p the pool to allocate any memory from
+ * @return the status of the operation:
+ * <PRE>
+ * APR_SUCCESS the file was opened for attribute access
+ * </PRE>
+ *
+ * @warning Platforms which do not implement this feature will return
+ * APR_ENOTIMPL.
+ */
+APR_DECLARE(apr_status_t) apr_xattr_open_file(apr_xattr_t **new,
+ apr_file_t *file,
+ apr_pool_t *p);
+
+/**
+ * Open a context for access to the extended attributes of an open directory
+ *
+ * @param new the context allocated for access to extended attributes
+ * @param dir the open directory to access the extended attributes on
+ * @param p the pool to allocate any memory from if required
+ * @return the status of the operation:
+ * <PRE>
+ * APR_SUCCESS the directory was opened for attribute access
+ * </PRE>
+ *
+ * @warning Platforms which do not implement this feature will return
+ * APR_ENOTIMPL.
+ */
+APR_DECLARE(apr_status_t) apr_xattr_open_dir(apr_xattr_t **new,
+ apr_dir_t *dir,
+ apr_pool_t *p);
+
+/**
+ * Destroy a context used for access to extended attributes
+ *
+ * @param xattr the context to destroy
+ * <PRE>
+ * APR_SUCCESS the context was destroyed
+ * </PRE>
+ *
+ * @warning Platforms which do not implement this feature will return
+ * APR_ENOTIMPL.
+ */
+APR_DECLARE(apr_status_t) apr_xattr_destroy(apr_xattr_t *xattr);
+
+/**
+ * Set an extended attribute on a file or directory
+ * @param xattr the opened extended attribute file or directory context
+ * @param name the attribute name to set
+ * @param value the attribute value
+ * @param size the size in bytes of the attribute value
+ * @param flags to control how the attribute is set
+ * <PRE>
+ * APR_XATTR_CREATE return an error if the attribute name
+ * already exists.
+ * APR_XATTR_REPLACE return an error if the attribute name
+ * does not already exist.
+ * </PRE>
+ * @param p the pool to allocate any memory from if required
+ * @return the status of the operation:
+ * <PRE>
+ * APR_SUCCESS the attribute was set
+ * APR_STATUS_IS_EEXIST() create flag and the attribute exists
+ * APR_STATUS_IS_ENOATTR() replace flag and the attribute doesn't exist
+ * </PRE>
+ * Other operating system dependant error codes may be returned
+ * in the cases not listed above.
+ *
+ * @remark if neither flag APR_XATTR_CREATE or APR_XATTR_REPLACE are
+ * given then the attribute will either be created if it does not
+ * already exist or replaced if it does exist.
+ *
+ * @warning Platforms which do not implement this feature will return
+ * APR_ENOTIMPL.
+ */
+APR_DECLARE(apr_status_t) apr_xattr_set(const apr_xattr_t *xattr,
+ const char *name,
+ const void *value,
+ apr_size_t size,
+ apr_uint32_t flags);
+
+/**
+ * Get an extended attribute from a file or directory
+ * @param xattr the opened extended attribute file or directory context
+ * @param name the name of the attribute to get
+ * @param value the returned attribute value allocated from the pool
+ * @param size the returned size of the attribute value
+ * @param flags to control how the attribute is got (reserved for future use)
+ * @param p the pool to allocate any memory from if required
+ * @return the status of the operation:
+ * <PRE>
+ * APR_SUCCESS the attribute was retrieved
+ * APR_STATUS_IS_ENOATTR() the attribute does not exist
+ * </PRE>
+ * Other operating system dependant error codes may be returned
+ * in the cases not listed above.
+ *
+ * @warning Platforms which do not implement this feature will return
+ * APR_ENOTIMPL.
+ */
+APR_DECLARE(apr_status_t) apr_xattr_get(const apr_xattr_t *xattr,
+ const char *name,
+ void **value,
+ apr_size_t *size,
+ apr_uint32_t flags);
+
+/**
+ * Check for the existence of an extended attribute on a file or directory
+ * @param xattr the opened extended attribute file or directory context
+ * @param name the name of the attribute to get
+ * @param exists the returned value indicating whether the attribute exists
+ * @param flags to control how the attribute is got (reserved for future use)
+ * @param p the pool to allocate any memory from if required
+ * @return the status of the operation:
+ * <PRE>
+ * APR_SUCCESS the existence was successfully tested
+ * </PRE>
+ * Other operating system dependant error codes may be returned
+ * in the cases not listed above.
+ *
+ * @warning Platforms which do not implement this feature will return
+ * APR_ENOTIMPL.
+ */
+APR_DECLARE(apr_status_t) apr_xattr_exists(const apr_xattr_t *xattr,
+ const char *name,
+ int *exists,
+ apr_uint32_t flags);
+
+/**
+ * List the extended attributes on a file or directory
+ * @param xattr the opened extended attribute file or directory context
+ * @param list the returned array of attributes names
+ * @param flags to control how the file is listed (reserved for future use)
+ * @param p the pool to allocate any memory from if required
+ * @return the status of the operation:
+ * <PRE>
+ * APR_SUCCESS the attributes were listed
+ * </PRE>
+ * Other operating system dependant error codes may be returned
+ * in the cases not listed above.
+ *
+ * @remark list is an array containing simple null terminated strings.
+ *
+ * @warning Platforms which do not implement this feature will return
+ * APR_ENOTIMPL.
+ */
+APR_DECLARE(apr_status_t) apr_xattr_list(const apr_xattr_t *xattr,
+ apr_array_header_t **list,
+ apr_uint32_t flags);
+
+/**
+ * Remove an extended attribute from a file or directory
+ * @param xattr the opened extended attribute file or directory context
+ * @param name the attribute name to remove
+ * @param flags to control how the attribute is removed (reserved for future use)
+ * @param p the pool to allocate any memory from if required
+ * @return the status of the operation:
+ * <PRE>
+ * APR_SUCCESS the attribute was removed
+ * APR_STATUS_IS_ENOATTR() the attribute does not exist
+ * </PRE>
+ * Other operating system dependant error codes may be returned
+ * in the cases not listed above.
+ *
+ * @warning Platforms which do not implement this feature will return
+ * APR_ENOTIMPL.
+ */
+APR_DECLARE(apr_status_t) apr_xattr_remove(const apr_xattr_t *xattr,
+ const char *name,
+ apr_uint32_t flags);
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! APR_FILE_XATTR_H */
Index: include/arch/unix/apr_arch_xattr.h
===================================================================
--- include/arch/unix/apr_arch_xattr.h (revision 0)
+++ include/arch/unix/apr_arch_xattr.h (revision 0)
@@ -0,0 +1,51 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef FILE_XATTR_H
+#define FILE_XATTR_H
+
+#if APR_HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+#if APR_HAVA_ERRNO_H
+#include <errno.h>
+#endif
+#if APR_HAVE_SYS_XATTR_H
+#include <sys/xattr.h>
+#endif
+#if APR_HAVE_SYS_EXTATTR_H
+#include <sys/extattr.h>
+#endif
+#if APR_HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#if APR_HAVE_DIRENT_H
+#include <dirent.h>
+#endif
+
+#ifdef _LARGEFILE64_SOURCE
+#define XATTR_OPEN_FLAGS O_RDONLY | O_LARGEFILE
+#else
+#define XATTR_OPEN_FLAGS O_RDONLY
+#endif
+
+struct apr_xattr_t {
+ int fd;
+ apr_uint32_t flags;
+ apr_pool_t *pool;
+};
+
+#endif
Index: include/apr_errno.h
===================================================================
--- include/apr_errno.h (revision 606453)
+++ include/apr_errno.h (working copy)
@@ -851,6 +851,13 @@
#define APR_EAFNOSUPPORT (APR_OS_START_CANONERR + 27)
#endif
+/** @see APR_STATUS_IS_ENOATTR */
+#ifdef ENOATTR
+#define APR_ENOATTR ENOATTR
+#else
+#define APR_ENOATTR (APR_OS_START_CANONERR + 28)
+#endif
+
/** @} */
#if defined(OS2) && !defined(DOXYGEN)
@@ -995,6 +1002,7 @@
|| (s) == APR_OS_START_SYSERR + ERROR_ACCESS_DENIED)
#define APR_STATUS_IS_EAFNOSUPPORT(s) ((s) == APR_AFNOSUPPORT \
|| (s) == APR_OS_START_SYSERR + SOCEAFNOSUPPORT)
+#define APR_STATUS_IS_ENOATTR(s) ((s) == APR_ENOATTR)
/*
Sorry, too tired to wrap this up for OS2... feel free to
@@ -1139,6 +1147,7 @@
|| (s) == APR_OS_START_SYSERR + ERROR_DIR_NOT_EMPTY)
#define APR_STATUS_IS_EAFNOSUPPORT(s) ((s) == APR_EAFNOSUPPORT \
|| (s) == APR_OS_START_SYSERR + WSAEAFNOSUPPORT)
+#define APR_STATUS_IS_ENOATTR(s) ((s) == APR_ENOATTR)
#elif defined(NETWARE) && defined(USE_WINSOCK) && !defined(DOXYGEN) /* !defined(OS2) && !defined(WIN32) */
@@ -1200,6 +1209,7 @@
#define APR_STATUS_IS_ENOTEMPTY(s) ((s) == APR_ENOTEMPTY)
#define APR_STATUS_IS_EAFNOSUPPORT(s) ((s) == APR_EAFNOSUPPORT \
|| (s) == APR_OS_START_SYSERR + WSAEAFNOSUPPORT)
+#define APR_STATUS_IS_ENOATTR(s) ((s) == APR_ENOATTR)
#else /* !defined(NETWARE) && !defined(OS2) && !defined(WIN32) */
@@ -1319,6 +1329,13 @@
(s) == APR_EEXIST)
/** Address Family not supported */
#define APR_STATUS_IS_EAFNOSUPPORT(s) ((s) == APR_EAFNOSUPPORT)
+/** Attribute does not exists */
+#ifdef ENODATA
+#define APR_STATUS_IS_ENOATTR(s) ((s) == APR_ENOATTR \
+ || (s) == ENODATA)
+#else
+#define APR_STATUS_IS_ENOATTR(s) ((s) == APR_ENOATTR)
+#endif
/** @} */
#endif /* !defined(NETWARE) && !defined(OS2) && !defined(WIN32) */