forked from enlightenment/efl
parent
9161f83a3e
commit
678727aae4
|
@ -1,3 +1,10 @@
|
||||||
|
2012-12-31 Gustavo Sverzut Barbieri (k-s)
|
||||||
|
|
||||||
|
* Fixed eina_xattr_value_ls() an eina_xattr_value_fd_ls()
|
||||||
|
* Added eina_xattr_fd_get(), eina_xattr_fd_set(),
|
||||||
|
eina_xattr_del(), eina_xattr_fd_del(), eina_xattr_copy() and
|
||||||
|
eina_xattr_fd_copy()
|
||||||
|
|
||||||
2012-12-24 Mike Blumenkrantz
|
2012-12-24 Mike Blumenkrantz
|
||||||
|
|
||||||
* eina_magic_fail() now throws error messages on NULL pointers instead of critical
|
* eina_magic_fail() now throws error messages on NULL pointers instead of critical
|
||||||
|
|
4
NEWS
4
NEWS
|
@ -43,6 +43,9 @@ Additions:
|
||||||
- Add ellipsis support in Evas_Object_Text.
|
- Add ellipsis support in Evas_Object_Text.
|
||||||
- Add EVAS_GL_LINE_OFFSET_HACK_DISABLE to turn off line shift correction by evas.
|
- Add EVAS_GL_LINE_OFFSET_HACK_DISABLE to turn off line shift correction by evas.
|
||||||
* Add ecore_audio API
|
* Add ecore_audio API
|
||||||
|
* Added eina_xattr_fd_get(), eina_xattr_fd_set(),
|
||||||
|
eina_xattr_del(), eina_xattr_fd_del(), eina_xattr_copy() and
|
||||||
|
eina_xattr_fd_copy()
|
||||||
|
|
||||||
Deprecations:
|
Deprecations:
|
||||||
* ecore_x:
|
* ecore_x:
|
||||||
|
@ -89,3 +92,4 @@ Fixes:
|
||||||
* Fix Evas RGBA_Image->flags.loaded for copied images.
|
* Fix Evas RGBA_Image->flags.loaded for copied images.
|
||||||
* Fix evas_object_image_is_inside()
|
* Fix evas_object_image_is_inside()
|
||||||
* eio functions no longer crash when passed NULL and throw errors accordingly
|
* eio functions no longer crash when passed NULL and throw errors accordingly
|
||||||
|
* Fix eina_xattr_value_ls() and eina_xattr_value_fd_ls()
|
||||||
|
|
|
@ -42,7 +42,10 @@ eina_value_02.c \
|
||||||
eina_value_03.c \
|
eina_value_03.c \
|
||||||
eina_inarray_01.c \
|
eina_inarray_01.c \
|
||||||
eina_inarray_02.c \
|
eina_inarray_02.c \
|
||||||
eina_magic_01.c
|
eina_magic_01.c \
|
||||||
|
eina_xattr_01.c \
|
||||||
|
eina_xattr_02.c
|
||||||
|
|
||||||
#eina_model_01.c \
|
#eina_model_01.c \
|
||||||
#eina_model_02.c \
|
#eina_model_02.c \
|
||||||
#eina_model_03.c
|
#eina_model_03.c
|
||||||
|
@ -81,7 +84,10 @@ eina_value_01 \
|
||||||
eina_value_02 \
|
eina_value_02 \
|
||||||
eina_value_03 \
|
eina_value_03 \
|
||||||
eina_inarray_01 \
|
eina_inarray_01 \
|
||||||
eina_inarray_02
|
eina_inarray_02 \
|
||||||
|
eina_xattr_01 \
|
||||||
|
eina_xattr_02
|
||||||
|
|
||||||
#eina_model_01 \
|
#eina_model_01 \
|
||||||
#eina_model_02 \
|
#eina_model_02 \
|
||||||
#eina_model_03 \
|
#eina_model_03 \
|
||||||
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
//Compile with:
|
||||||
|
//gcc -g eina_xattr_02.c -o eina_xattr_02 `pkg-config --cflags --libs eina`
|
||||||
|
|
||||||
|
#include <Eina.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
if (argc < 3)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ERROR: incorrect usage.\n"
|
||||||
|
"Usage:\n"
|
||||||
|
"\t%s list <file>\n"
|
||||||
|
"\t%s get <file> <key>\n"
|
||||||
|
"\t%s del <file> <key>\n"
|
||||||
|
"\t%s set <file> <key> <value>\n",
|
||||||
|
argv[0], argv[0], argv[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(argv[1], "list") == 0)
|
||||||
|
{
|
||||||
|
Eina_Iterator *itr;
|
||||||
|
Eina_Xattr *xattr;
|
||||||
|
|
||||||
|
printf("xattrs of %s:\n", argv[2]);
|
||||||
|
|
||||||
|
eina_init();
|
||||||
|
|
||||||
|
itr = eina_xattr_value_ls(argv[2]);
|
||||||
|
EINA_ITERATOR_FOREACH(itr, xattr)
|
||||||
|
printf("\t%s: %.*s\n", xattr->name, xattr->length, xattr->value);
|
||||||
|
eina_iterator_free(itr);
|
||||||
|
|
||||||
|
eina_shutdown();
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (strcmp(argv[1], "get") == 0)
|
||||||
|
{
|
||||||
|
size_t size = 0;
|
||||||
|
const char *value;
|
||||||
|
|
||||||
|
if (argc < 4)
|
||||||
|
{
|
||||||
|
fputs("ERROR: missing key\n", stderr);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
eina_init();
|
||||||
|
value = eina_xattr_get(argv[2], argv[3], &size);
|
||||||
|
printf("%s: %.*s\n", argv[3], (int)size, value);
|
||||||
|
eina_shutdown();
|
||||||
|
}
|
||||||
|
else if (strcmp(argv[1], "del") == 0)
|
||||||
|
{
|
||||||
|
Eina_Bool ret;
|
||||||
|
|
||||||
|
if (argc < 4)
|
||||||
|
{
|
||||||
|
fputs("ERROR: missing key\n", stderr);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
eina_init();
|
||||||
|
ret = eina_xattr_del(argv[2], argv[3]);
|
||||||
|
printf("del xattr '%s': %s\n", argv[3], ret ? "success" : "failure");
|
||||||
|
eina_shutdown();
|
||||||
|
}
|
||||||
|
else if (strcmp(argv[1], "set") == 0)
|
||||||
|
{
|
||||||
|
size_t size = 0;
|
||||||
|
const char *value;
|
||||||
|
Eina_Bool ret;
|
||||||
|
|
||||||
|
if (argc < 5)
|
||||||
|
{
|
||||||
|
fputs("ERROR: missing key or value\n", stderr);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
eina_init();
|
||||||
|
ret = eina_xattr_set(argv[2], argv[3], argv[4], strlen(argv[4]), 0);
|
||||||
|
|
||||||
|
printf("set xattr '%s=%s' on '%s': %s\n",
|
||||||
|
argv[3], argv[4], argv[2], ret ? "success" : "failure");
|
||||||
|
|
||||||
|
eina_shutdown();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fprintf(stderr, "ERROR: unknown command '%s'\n", argv[1]);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
//Compile with:
|
||||||
|
//gcc -g eina_xattr_02.c -o eina_xattr_02 `pkg-config --cflags --libs eina`
|
||||||
|
|
||||||
|
#include <Eina.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
Eina_Bool ret;
|
||||||
|
|
||||||
|
if (argc != 3)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ERROR: incorrect usage.\nUsage: %s <src> <dst>\n",
|
||||||
|
argv[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
eina_init();
|
||||||
|
ret = eina_xattr_copy(argv[1], argv[2]);
|
||||||
|
printf("copied xattrs from '%s' to '%s': %s\n",
|
||||||
|
argv[1], argv[2], ret ? "success" : "failure");
|
||||||
|
eina_shutdown();
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -352,7 +352,7 @@ eina_xattr_get(const char *file, const char *attribute, ssize_t *size)
|
||||||
|
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
|
||||||
EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL);
|
||||||
EINA_SAFETY_ON_TRUE_RETURN_VAL(!size, NULL);
|
EINA_SAFETY_ON_NULL_RETURN_VAL(size, NULL);
|
||||||
|
|
||||||
*size = getxattr(file, attribute, NULL, 0);
|
*size = getxattr(file, attribute, NULL, 0);
|
||||||
/* Size should be less than 2MB (already huge in my opinion) */
|
/* Size should be less than 2MB (already huge in my opinion) */
|
||||||
|
@ -382,6 +382,44 @@ eina_xattr_get(const char *file, const char *attribute, ssize_t *size)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI void *
|
||||||
|
eina_xattr_fd_get(int fd, const char *attribute, ssize_t *size)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_XATTR
|
||||||
|
char *ret = NULL;
|
||||||
|
ssize_t tmp;
|
||||||
|
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL);
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(size, NULL);
|
||||||
|
|
||||||
|
*size = fgetxattr(fd, attribute, NULL, 0);
|
||||||
|
/* Size should be less than 2MB (already huge in my opinion) */
|
||||||
|
if (!(*size > 0 && *size < 2 * 1024 * 1024))
|
||||||
|
goto on_error;
|
||||||
|
|
||||||
|
ret = malloc(*size + 1);
|
||||||
|
if (!ret) goto on_error;
|
||||||
|
|
||||||
|
tmp = fgetxattr(fd, attribute, ret, *size);
|
||||||
|
if (tmp != *size)
|
||||||
|
goto on_error;
|
||||||
|
ret[tmp] = '\0';
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
on_error:
|
||||||
|
free(ret);
|
||||||
|
*size = 0;
|
||||||
|
return NULL;
|
||||||
|
#else
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(size, NULL);
|
||||||
|
*size = 0;
|
||||||
|
return NULL;
|
||||||
|
(void)fd;
|
||||||
|
(void)attribute;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags)
|
eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags)
|
||||||
{
|
{
|
||||||
|
@ -415,6 +453,65 @@ eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Bool
|
||||||
|
eina_xattr_fd_set(int fd, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_XATTR
|
||||||
|
int iflags;
|
||||||
|
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, EINA_FALSE);
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
|
||||||
|
EINA_SAFETY_ON_TRUE_RETURN_VAL(!(length > 0 && length < 2 * 1024 * 1024), EINA_FALSE);
|
||||||
|
|
||||||
|
switch (flags)
|
||||||
|
{
|
||||||
|
case EINA_XATTR_INSERT: iflags = 0; break;
|
||||||
|
case EINA_XATTR_REPLACE: iflags = XATTR_REPLACE; break;
|
||||||
|
case EINA_XATTR_CREATED: iflags = XATTR_CREATE; break;
|
||||||
|
default:
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fsetxattr(fd, attribute, data, length, iflags))
|
||||||
|
return EINA_FALSE;
|
||||||
|
return EINA_TRUE;
|
||||||
|
#else
|
||||||
|
return EINA_FALSE;
|
||||||
|
(void)fd;
|
||||||
|
(void)attribute;
|
||||||
|
(void)data;
|
||||||
|
(void)length;
|
||||||
|
(void)flags;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Bool
|
||||||
|
eina_xattr_del(const char *file, const char *attribute)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_XATTR
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(file, EINA_FALSE);
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, EINA_FALSE);
|
||||||
|
return removexattr(file, attribute) == 0;
|
||||||
|
#else
|
||||||
|
return EINA_FALSE;
|
||||||
|
(void)file;
|
||||||
|
(void)attribute;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Bool
|
||||||
|
eina_xattr_fd_del(int fd, const char *attribute)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_XATTR
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, EINA_FALSE);
|
||||||
|
return fremovexattr(fd, attribute) == 0;
|
||||||
|
#else
|
||||||
|
return EINA_FALSE;
|
||||||
|
(void)fd;
|
||||||
|
(void)attribute;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags)
|
eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags)
|
||||||
{
|
{
|
||||||
|
@ -501,3 +598,88 @@ eina_xattr_int_get(const char *file, const char *attribute, int *value)
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Bool
|
||||||
|
eina_xattr_copy(const char *src, const char *dst)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_XATTR
|
||||||
|
int sfd, dfd;
|
||||||
|
Eina_Bool ret = EINA_FALSE;
|
||||||
|
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(src, EINA_FALSE);
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(dst, EINA_FALSE);
|
||||||
|
|
||||||
|
sfd = open(src, O_RDONLY);
|
||||||
|
EINA_SAFETY_ON_TRUE_GOTO(sfd < 0, s_end);
|
||||||
|
|
||||||
|
dfd = open(dst, O_RDWR);
|
||||||
|
EINA_SAFETY_ON_TRUE_GOTO(dfd < 0, d_end);
|
||||||
|
|
||||||
|
ret = eina_xattr_fd_copy(sfd, dfd);
|
||||||
|
|
||||||
|
close(dfd);
|
||||||
|
d_end:
|
||||||
|
close(sfd);
|
||||||
|
s_end:
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
#else
|
||||||
|
return EINA_FALSE;
|
||||||
|
(void)src;
|
||||||
|
(void)dst;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI Eina_Bool
|
||||||
|
eina_xattr_fd_copy(int src, int dst)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_XATTR
|
||||||
|
char *buf, *attr;
|
||||||
|
ssize_t i, length;
|
||||||
|
Eina_Bool ret;
|
||||||
|
|
||||||
|
length = flistxattr(src, NULL, 0);
|
||||||
|
if (length == 0) return EINA_TRUE;
|
||||||
|
EINA_SAFETY_ON_TRUE_RETURN_VAL(length < 0, EINA_FALSE);
|
||||||
|
|
||||||
|
buf = malloc(length);
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(buf, EINA_FALSE);
|
||||||
|
|
||||||
|
attr = buf;
|
||||||
|
length = flistxattr(src, attr, length);
|
||||||
|
ret = EINA_TRUE;
|
||||||
|
for (i = 0; i < length; i += strlen(attr) + 1, attr += strlen(attr) + 1)
|
||||||
|
{
|
||||||
|
ssize_t attr_length;
|
||||||
|
void *value;
|
||||||
|
|
||||||
|
attr_length = fgetxattr(src, attr, NULL, 0);
|
||||||
|
EINA_SAFETY_ON_TRUE_GOTO(attr_length < 0, attr_error);
|
||||||
|
|
||||||
|
if (attr_length == 0)
|
||||||
|
value = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value = malloc(attr_length);
|
||||||
|
EINA_SAFETY_ON_NULL_GOTO(value, attr_error);
|
||||||
|
|
||||||
|
attr_length = fgetxattr(src, attr, value, attr_length);
|
||||||
|
}
|
||||||
|
|
||||||
|
fsetxattr(dst, attr, value, attr_length, 0);
|
||||||
|
free(value);
|
||||||
|
continue;
|
||||||
|
|
||||||
|
attr_error:
|
||||||
|
ret = EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
#else
|
||||||
|
return EINA_FALSE;
|
||||||
|
(void)src;
|
||||||
|
(void)dst;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ struct _Eina_Xattr
|
||||||
*
|
*
|
||||||
* @since 1.1
|
* @since 1.1
|
||||||
*/
|
*/
|
||||||
EAPI Eina_Iterator *eina_xattr_ls(const char *file);
|
EAPI Eina_Iterator *eina_xattr_ls(const char *file) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get an iterator that list all extended attribute value related to a fd.
|
* @brief Get an iterator that list all extended attribute value related to a fd.
|
||||||
|
@ -72,7 +72,7 @@ EAPI Eina_Iterator *eina_xattr_ls(const char *file);
|
||||||
*
|
*
|
||||||
* @since 1.2
|
* @since 1.2
|
||||||
*/
|
*/
|
||||||
EAPI Eina_Iterator *eina_xattr_value_ls(const char *file);
|
EAPI Eina_Iterator *eina_xattr_value_ls(const char *file) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get an iterator that list all extended attribute related to a fd.
|
* @brief Get an iterator that list all extended attribute related to a fd.
|
||||||
|
@ -85,7 +85,7 @@ EAPI Eina_Iterator *eina_xattr_value_ls(const char *file);
|
||||||
*
|
*
|
||||||
* @since 1.2
|
* @since 1.2
|
||||||
*/
|
*/
|
||||||
EAPI Eina_Iterator *eina_xattr_fd_ls(int fd);
|
EAPI Eina_Iterator *eina_xattr_fd_ls(int fd) EINA_WARN_UNUSED_RESULT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get an iterator that list all extended attribute value related to a fd.
|
* @brief Get an iterator that list all extended attribute value related to a fd.
|
||||||
|
@ -98,7 +98,27 @@ EAPI Eina_Iterator *eina_xattr_fd_ls(int fd);
|
||||||
*
|
*
|
||||||
* @since 1.2
|
* @since 1.2
|
||||||
*/
|
*/
|
||||||
EAPI Eina_Iterator *eina_xattr_value_fd_ls(int fd);
|
EAPI Eina_Iterator *eina_xattr_value_fd_ls(int fd) EINA_WARN_UNUSED_RESULT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Copy the extended attribute from one file to another.
|
||||||
|
* @param src source file to use as input.
|
||||||
|
* @param dst destination file to use as output.
|
||||||
|
* @return #EINA_TRUE on success, #EINA_FALSE otherwise.
|
||||||
|
* @see eina_xattr_fd_copy()
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool eina_xattr_copy(const char *src, const char *dst) EINA_ARG_NONNULL(1, 2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Copy the extended attribute from one file descriptor to another.
|
||||||
|
* @param src source file descriptor to use as input.
|
||||||
|
* @param dst destination file descriptor to use as output.
|
||||||
|
* @return #EINA_TRUE on success, #EINA_FALSE otherwise.
|
||||||
|
* @see eina_xattr_copy()
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool eina_xattr_fd_copy(int src, int dst);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Retrieve an extended attribute from a file.
|
* @brief Retrieve an extended attribute from a file.
|
||||||
|
@ -112,7 +132,21 @@ EAPI Eina_Iterator *eina_xattr_value_fd_ls(int fd);
|
||||||
*
|
*
|
||||||
* @since 1.1
|
* @since 1.1
|
||||||
*/
|
*/
|
||||||
EAPI void *eina_xattr_get(const char *file, const char *attribute, ssize_t *size);
|
EAPI void *eina_xattr_get(const char *file, const char *attribute, ssize_t *size) EINA_ARG_NONNULL(1, 2, 3) EINA_WARN_UNUSED_RESULT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Retrieve an extended attribute from a file descriptor.
|
||||||
|
*
|
||||||
|
* @param fd The file descriptor to retrieve the extended attribute from.
|
||||||
|
* @param attribute The extended attribute name to retrieve.
|
||||||
|
* @param size The size of the retrieved extended attribute.
|
||||||
|
* @return the allocated data that hold the extended attribute value.
|
||||||
|
*
|
||||||
|
* It will return @c NULL and *size will be @c 0 if it fails.
|
||||||
|
*
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
EAPI void *eina_xattr_fd_get(int fd, const char *attribute, ssize_t *size) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set an extended attribute on a file.
|
* @brief Set an extended attribute on a file.
|
||||||
|
@ -126,7 +160,44 @@ EAPI void *eina_xattr_get(const char *file, const char *attribute, ssize_t *size
|
||||||
*
|
*
|
||||||
* @since 1.1
|
* @since 1.1
|
||||||
*/
|
*/
|
||||||
EAPI Eina_Bool eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags);
|
EAPI Eina_Bool eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags) EINA_ARG_NONNULL(1, 2, 3);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set an extended attribute on a file descriptor.
|
||||||
|
*
|
||||||
|
* @param fd The file descriptor to set the extended attribute to.
|
||||||
|
* @param attribute The attribute to set.
|
||||||
|
* @param data The data to set.
|
||||||
|
* @param length The length of the data to set.
|
||||||
|
* @param flags Define the set policy.
|
||||||
|
* @return #EINA_TRUE on success, #EINA_FALSE otherwise.
|
||||||
|
*
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool eina_xattr_fd_set(int fd, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags) EINA_ARG_NONNULL(2, 3);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Delete (remove) an extended attribute from a file.
|
||||||
|
*
|
||||||
|
* @param file The file to del the extended attribute from.
|
||||||
|
* @param attribute The attribute to del.
|
||||||
|
* @return #EINA_TRUE on success, #EINA_FALSE otherwise.
|
||||||
|
*
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool eina_xattr_del(const char *file, const char *attribute) EINA_ARG_NONNULL(1, 2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Delete (remove) an extended attribute from a file descriptor.
|
||||||
|
*
|
||||||
|
* @param fd The file descriptor to del the extended attribute from.
|
||||||
|
* @param attribute The attribute to del.
|
||||||
|
* @return #EINA_TRUE on success, #EINA_FALSE otherwise.
|
||||||
|
*
|
||||||
|
* @since 1.8
|
||||||
|
*/
|
||||||
|
EAPI Eina_Bool eina_xattr_fd_del(int fd, const char *attribute) EINA_ARG_NONNULL(2);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Set a string as a extended attribute properties.
|
* @brief Set a string as a extended attribute properties.
|
||||||
|
|
Loading…
Reference in New Issue