]> arthur.barton.de Git - netatalk.git/blobdiff - include/atalk/ea.h
Merge master
[netatalk.git] / include / atalk / ea.h
index 48432ef6e9aa88391ad0a6b88acafa04f60fcaad..f26e32b288f0171058159a9979f5474465175039 100644 (file)
@@ -1,5 +1,4 @@
 /*
-   $Id: ea.h,v 1.10 2009-12-10 17:40:25 franklahm Exp $
    Copyright (c) 2009 Frank Lahm <franklahm@gmail.com>
 
    This program is free software; you can redistribute it and/or modify
 #include <config.h>
 #endif
 
-#ifdef HAVE_NFSv4_ACLS
+#if HAVE_ATTR_XATTR_H
+#include <attr/xattr.h>
+#elif HAVE_SYS_XATTR_H
+#include <sys/xattr.h>
+#endif
+
+#ifdef HAVE_SYS_EA_H
+#include <sys/ea.h>
+#endif
+
+#ifdef HAVE_SYS_EXTATTR_H
+#include <sys/extattr.h>
+#endif
+
+#ifdef HAVE_SOLARIS_ACLS
 #include <sys/acl.h>
 #endif
 
+#ifndef ENOATTR
+#define ENOATTR ENODATA
+#endif
+
 #include <atalk/vfs.h>
 
 /*
@@ -56,6 +73,27 @@ enum {
 #define XATTR_REPLACE 0x2       /* set value, fail if attr does not exist */
 #endif
 
+/* Names for our Extended Attributes adouble data */
+#define AD_EA_META "org.netatalk.Metadata"
+#define AD_EA_RESO "org.netatalk.ResourceFork"
+#define NOT_NETATALK_EA(a) (strcmp((a), AD_EA_META) != 0) && (strcmp((a), AD_EA_RESO) != 0)
+
+/****************************************************************************************
+ * Wrappers for native EA functions taken from Samba
+ ****************************************************************************************/
+ssize_t sys_getxattr (const char *path, const char *name, void *value, size_t size);
+ssize_t sys_lgetxattr (const char *path, const char *name, void *value, size_t size);
+ssize_t sys_fgetxattr (int filedes, const char *name, void *value, size_t size);
+ssize_t sys_listxattr (const char *path, char *list, size_t size);
+ssize_t sys_llistxattr (const char *path, char *list, size_t size);
+ssize_t sys_flistxattr (int filedes, char *list, size_t size);
+int sys_removexattr (const char *path, const char *name);
+int sys_lremovexattr (const char *path, const char *name);
+int sys_fremovexattr (int filedes, const char *name);
+int sys_setxattr (const char *path, const char *name, const void *value, size_t size, int flags);
+int sys_lsetxattr (const char *path, const char *name, const void *value, size_t size, int flags);
+int sys_fsetxattr (int filedes, const char *name, const void *value, size_t size, int flags);
+int sys_copyxattr (const char *src, const char *dst);
 
 /****************************************************************************************
  * Stuff for our implementation of storing EAs in files in .AppleDouble dirs
@@ -99,6 +137,7 @@ struct ea_entry {
 struct ea {
     uint32_t             ea_inited;       /* needed for interfacing ea_open w. ea_close */
     const struct vol     *vol;            /* vol handle, ea_close needs it */
+    int                  dirfd;           /* for *at (cf openat) semantics, -1 means ignore */
     char                 *filename;       /* name of file, needed by ea_close too */
     unsigned int         ea_count;        /* number of EAs in ea_entries array */
     struct ea_entry      (*ea_entries)[]; /* malloced and realloced as needed by ea_count*/
@@ -154,6 +193,11 @@ extern int ea_open(const struct vol * restrict vol,
                    const char * restrict uname,
                    eaflags_t eaflags,
                    struct ea * restrict ea);
+extern int ea_openat(const struct vol * restrict vol,
+                     int dirfd,
+                     const char * restrict uname,
+                     eaflags_t eaflags,
+                     struct ea * restrict ea);
 extern int ea_close(struct ea * restrict ea);
 extern char *ea_path(const struct ea * restrict ea, const char * restrict eaname, int macname);