]> arthur.barton.de Git - netatalk.git/commitdiff
Merge master
authorFrank Lahm <franklahm@googlemail.com>
Wed, 2 Mar 2011 10:37:41 +0000 (11:37 +0100)
committerFrank Lahm <franklahm@googlemail.com>
Wed, 2 Mar 2011 10:37:41 +0000 (11:37 +0100)
1  2 
etc/afpd/afp_dsi.c
include/atalk/adouble.h

diff --combined etc/afpd/afp_dsi.c
index 2766514b96933941820c6836a6ed906dfcd9233e,aaf3d8d64cd94dc3d8433ac2c76898259a193c2e..11af0d101e78866df00091d89444d7b3b36612e9
@@@ -31,7 -31,6 +31,7 @@@
  #include <atalk/dsi.h>
  #include <atalk/compat.h>
  #include <atalk/util.h>
 +#include <atalk/locking.h>
  
  #include "globals.h"
  #include "switch.h"
  #include "fork.h"
  #include "dircache.h"
  
 -#ifdef FORCE_UIDGID
 -#warning UIDGID
 -#include "uid.h"
 -#endif /* FORCE_UIDGID */
 -
  /* 
   * We generally pass this from afp_over_dsi to all afp_* funcs, so it should already be
   * available everywhere. Unfortunately some funcs (eg acltoownermode) need acces to it
@@@ -63,7 -67,6 +63,6 @@@ typedef struct 
  static rc_elem_t replaycache[REPLAYCACHE_SIZE];
  
  static sigjmp_buf recon_jmp;
- static int oldsock = -1;
  static void afp_dsi_close(AFPObj *obj)
  {
      DSI *dsi = obj->handle;
@@@ -133,7 -136,7 +132,7 @@@ static void afp_dsi_transfer_session(in
      int socket;
      DSI *dsi = (DSI *)AFPobj->handle;
  
-     LOG(log_note, logtype_afpd, "afp_dsi_transfer_session: got SIGURG, trying to receive session");
+     LOG(log_debug, logtype_afpd, "afp_dsi_transfer_session: got SIGURG, trying to receive session");
  
      if (readt(AFPobj->ipc_fd, &dsiID, 2, 0, 2) != 2) {
          LOG(log_error, logtype_afpd, "afp_dsi_transfer_session: couldn't receive DSI id, goodbye");
          exit(EXITERR_SYS);
      }
  
-     LOG(log_note, logtype_afpd, "afp_dsi_transfer_session: received socket fd: %i", socket);
+     LOG(log_debug, logtype_afpd, "afp_dsi_transfer_session: received socket fd: %i", socket);
  
+     dsi->proto_close(dsi);
      dsi->socket = socket;
      dsi->flags = DSI_RECONSOCKET;
      dsi->datalen = 0;
@@@ -472,13 -476,6 +472,6 @@@ void afp_over_dsi(AFPObj *obj
              pause(); /* gets interrupted by SIGALARM or SIGURG tickle */
              continue; /* continue receiving until disconnect timer expires
                         * or a primary reconnect succeeds  */
-         } else {
-             if (oldsock != -1) {
-                 /* Now, after successfully reading from the new socket after a reconnect       *
-                  * we can close the old socket without taking the risk of confusing the client */
-                 close(oldsock);
-                 oldsock = -1;
-             }
          }
  
          if (!(dsi->flags & DSI_EXTSLEEP) && (dsi->flags & DSI_SLEEPING)) {
  
                      dir_free_invalid_q();
  
 -#ifdef FORCE_UIDGID
 -                    /* bring everything back to old euid, egid */
 -                    if (obj->force_uid)
 -                        restore_uidgid ( &obj->uidgid );
 -#endif /* FORCE_UIDGID */
                      dsi->flags &= ~DSI_RUNNING;
  
                      /* Add result to the AFP replay cache */
                      AfpNum2name(function), AfpErr2name(err));
  
                  dsi->flags &= ~DSI_RUNNING;
 -#ifdef FORCE_UIDGID
 -              /* bring everything back to old euid, egid */
 -              if (obj->force_uid)
 -                  restore_uidgid ( &obj->uidgid );
 -#endif /* FORCE_UIDGID */
              } else {
                  LOG(log_error, logtype_afpd, "(write) bad function %x", function);
                  dsi->datalen = 0;
diff --combined include/atalk/adouble.h
index daa0b0ca94febafa2e5212cb5f7cc1efe7aa455b,18422eca680dc89c2950813d36cfe7ff97b50073..8e0b11e15a60e13ec935814f382c08fe7d6faf49
@@@ -1,4 -1,5 +1,4 @@@
  /*
 - * $Id: adouble.h,v 1.55 2010-03-30 12:55:26 franklahm Exp $
   * Copyright (c) 1990,1991 Regents of The University of Michigan.
   * All Rights Reserved.
   *
  #include <config.h>
  #endif
  
 -/* -------------------
 - * need pread() and pwrite()
 - */
 -#ifdef HAVE_PREAD
 -
 -#ifndef HAVE_PWRITE
 -#undef HAVE_PREAD
 -#endif
 -
 -#endif
 -
 -#ifdef HAVE_PWRITE
 -#ifndef HAVE_PREAD
 -#undef HAVE_PWRITE
 -#endif
 -#endif
 -
 -/*
 -  Still have to figure out which platforms really
 -  need _XOPEN_SOURCE defined for pread.
 -*/
 -#if defined(HAVE_PREAD) && !defined(SOLARIS) && !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(TRU64)
 -#ifndef _XOPEN_SOURCE
 -#define _XOPEN_SOURCE 500
 -#endif
 -#endif
 -
 +#include <inttypes.h>
  #include <sys/types.h>
  #include <sys/stat.h>
 -
 -#ifdef HAVE_UNISTD_H
 -#undef __USE_MISC
 -#define __USE_MISC
  #include <unistd.h>
 -#endif
 -
 -#include <sys/cdefs.h>
 -
 -#ifdef HAVE_FCNTL_H
  #include <fcntl.h>
 -#endif
  
- #ifdef USE_MMAPPED_HEADERS
  #include <sys/mman.h>
- #endif
  
 -#ifdef HAVE_SYS_TIME_H
  #include <sys/time.h>
 -#endif
 -#include <netatalk/endian.h>
  
 -/* version info */
 -#define AD_VERSION1     0x00010000
 -#define SFM_VERSION     AD_VERSION1
 +#include <atalk/bstrlib.h>
 +#include <atalk/locking.h>
  
 +/* version info */
  #define AD_VERSION2     0x00020000
 -#define AD_VERSION2_OSX 0x00020001
 -/*
 -  #define AD_VERSION1_ADS 0x00010002
 -*/
 -#define AD_VERSION1_SFM 0x00010003
 +#define AD_VERSION_EA   0x00020002
 +
 +/* default */
  #define AD_VERSION      AD_VERSION2
  
  /*
   */
  #define ADEID_DFORK         1
  #define ADEID_RFORK         2
 -#define ADEID_NAME          3 /* Note: starting with Netatalk 2.1 we do NOT alway set the name */
 +#define ADEID_NAME          3
  #define ADEID_COMMENT       4
  #define ADEID_ICONBW        5
  #define ADEID_ICONCOL       6
  #define ADEID_AFPFILEI      14 /* where the rest of the FILEI info goes */
  #define ADEID_DID           15
  
 -#if AD_VERSION == AD_VERSION1
 -#define ADEID_MAX           16
 -#else
  /* netatalk private note fileid reused DID */
  #define ADEID_PRIVDEV       16
  #define ADEID_PRIVINO       17
  #define ADEID_PRIVSYN       18 /* in synch with database */
  #define ADEID_PRIVID        19
 -#define ADEID_SFMRESERVE1   20
 -#define ADEID_SFMRESERVE2   21
 +#define ADEID_MAX           (ADEID_PRIVID + 1)
  
 +/* These are the real ids for these entries, as stored in the adouble file */
  #define AD_DEV              0x80444556
  #define AD_INO              0x80494E4F
  #define AD_SYN              0x8053594E
  #define AD_ID               0x8053567E
 -#define ADEID_MAX           22
 -#endif
  
  /* magic */
  #define AD_APPLESINGLE_MAGIC 0x00051600
  #define AD_APPLEDOUBLE_MAGIC 0x00051607
  #define AD_MAGIC             AD_APPLEDOUBLE_MAGIC
 -#define SFM_MAGIC            0x00504641
  
  /* sizes of relevant entry bits */
  #define ADEDLEN_MAGIC       4
  #define ADEDLEN_VERSION     4
  #define ADEDLEN_FILLER      16
  #define ADEDLEN_NENTRIES    2
 -
 -/* 26 */
 -#define AD_HEADER_LEN       (ADEDLEN_MAGIC + ADEDLEN_VERSION + \
 -                             ADEDLEN_FILLER + ADEDLEN_NENTRIES)
 +#define AD_HEADER_LEN       (ADEDLEN_MAGIC + ADEDLEN_VERSION + ADEDLEN_FILLER + ADEDLEN_NENTRIES)
  #define AD_ENTRY_LEN        12  /* size of a single entry header */
  
 -/* v1 field widths */
 -#define ADEDLEN_NAME        255
 -#define ADEDLEN_COMMENT     200
 -#define ADEDLEN_FILEI       16
 -#define ADEDLEN_FINDERI     32
 -
 -/* v2 field widths */
 +/* field widths */
 +#define ADEDLEN_NAME            255
 +#define ADEDLEN_COMMENT         200
 +#define ADEDLEN_FILEI           16
 +#define ADEDLEN_FINDERI         32
  #define ADEDLEN_FILEDATESI      16
  #define ADEDLEN_SHORTNAME       12 /* length up to 8.3 */
  #define ADEDLEN_AFPFILEI        4
  #define ADEDLEN_PRIVSYN         8
  #define ADEDLEN_PRIVID          4
  
 -#define ADEID_NUM_V1            5
  #define ADEID_NUM_V2            13
 +#define ADEID_NUM_EA            5
  
 -// #define ADEID_NUM_SFM        5
 -/* sizeof SFM meta data */
 -#define AD_SFM_LEN 60
 -
 -/* 589 */
 -#define AD_DATASZ1      (AD_HEADER_LEN + ADEDLEN_NAME + ADEDLEN_COMMENT + ADEDLEN_FILEI + ADEDLEN_FINDERI + \
 -                         (ADEID_NUM_V1 * AD_ENTRY_LEN))
 -
 -#if AD_DATASZ1 != 589
 -#error bad size for AD_DATASZ1
 +#define AD_DATASZ2 (AD_HEADER_LEN + ADEDLEN_NAME + ADEDLEN_COMMENT + ADEDLEN_FILEI + \
 +                    ADEDLEN_FINDERI + ADEDLEN_DID + ADEDLEN_AFPFILEI + ADEDLEN_SHORTNAME + \
 +                    ADEDLEN_PRODOSFILEI + ADEDLEN_PRIVDEV + ADEDLEN_PRIVINO + \
 +                    ADEDLEN_PRIVSYN + ADEDLEN_PRIVID + (ADEID_NUM_V2 * AD_ENTRY_LEN))
 +#if AD_DATASZ2 != 741
 +#error bad size for AD_DATASZ2
  #endif
  
 -#define AD_NEWSZ2       (ADEDLEN_DID + ADEDLEN_AFPFILEI + ADEDLEN_SHORTNAME + ADEDLEN_PRODOSFILEI \
 -                         + ADEDLEN_PRIVDEV + ADEDLEN_PRIVINO + ADEDLEN_PRIVSYN + ADEDLEN_PRIVID)
 -
 -/* 725 */
 -#define AD_DATASZ2      (AD_DATASZ1 + AD_NEWSZ2 + ((ADEID_NUM_V2 - ADEID_NUM_V1) * AD_ENTRY_LEN))
 +#define AD_DATASZ_EA (AD_HEADER_LEN + (ADEID_NUM_EA * AD_ENTRY_LEN) + ADEDLEN_FINDERI + \
 +                      ADEDLEN_COMMENT + ADEDLEN_FILEDATESI + ADEDLEN_AFPFILEI + ADEDLEN_PRIVID)
  
 -#if AD_DATASZ2 != 741
 -#error bad size for AD_DATASZ2
 +#if AD_DATASZ_EA != 342
 +#error bad size for AD_DATASZ_EA
  #endif
  
  #define AD_DATASZ_MAX   1024
 -#if AD_VERSION == AD_VERSION1
 -#define AD_DATASZ   AD_DATASZ1 /* hold enough for the entries */
 -#elif AD_VERSION == AD_VERSION2
 +
 +#if AD_VERSION == AD_VERSION2
  #define AD_DATASZ   AD_DATASZ2
 +#elif AD_VERSION == AD_VERSION_EA
 +#define AD_DATASZ   AD_DATASZ_EA
  #endif
  
 -/*
 - * some legacy defines from netatalk-990130
 - * (to keep from breaking certain packages)
 - *
 - */
 -
 -#define ADEDOFF_RFORK   589
 -#define ADEDOFF_NAME    86
 -#define ADEDOFF_COMMENT 341
 -#define ADEDOFF_FINDERI 557
 -#ifndef ADEDOFF_FILEI
 -#define ADEDOFF_FILEI   541
 -#endif
 +#define RFORK_EA_ALLOCSIZE (128*1024) /* 128k */
  
  typedef u_int32_t cnid_t;
  
 -/*
 - * The header of the AppleDouble Header File looks like this:
 - *
 - *  NAME            SIZE
 - *  ====            ====
 - *  Magic           4
 - *  Version         4
 - *  Home File System    16  (this becomes filler in ad v2)
 - *  Number of Entries   2
 - *  Entry Descriptors for each entry:
 - *      Entry ID    4
 - *      Offset      4
 - *      Length      4
 - */
 -
  struct ad_entry {
 -    u_int32_t   ade_off;
 -    u_int32_t   ade_len;
 +    uint32_t   ade_off;
 +    uint32_t   ade_len;
  };
  
  typedef struct adf_lock_t {
  
  struct ad_fd {
      int          adf_fd;        /* -1: invalid, -2: symlink */
 -
  #ifndef HAVE_PREAD
      off_t        adf_off;
  #endif
 -
      char         *adf_syml;
      int          adf_flags;
      int          adf_excl;
 +#if 0
      adf_lock_t   *adf_lock;
      int          adf_refcount, adf_lockcount, adf_lockmax;
 +#endif
  };
  
  /* some header protection */
  #define AD_INITED  0xad494e54  /* ad"INT" */
 -struct adouble_fops;
 -
 -struct adouble {
 -    u_int32_t           ad_magic;
 -    u_int32_t           ad_version;
 -    char                ad_filler[ 16 ];
 -    struct ad_entry     ad_eid[ ADEID_MAX ];
 -    struct ad_fd        ad_data_fork, ad_resource_fork, ad_metadata_fork;
 -    struct ad_fd        *ad_md; /* either ad_resource or ad_metadata */
 -
 -    int                 ad_flags;    /* This really stores version info too (AD_VERSION*) */
 -    int                 ad_adflags;  /* ad_open flags adflags like ADFLAGS_DIR */
 -    unsigned int        ad_inited;
 -    int                 ad_options;
 -    int                 ad_fileordir;
 -    int                 ad_refcount; /* used in afpd/ofork.c */
 -    off_t               ad_rlen;     /* ressource fork len with AFP 3.0
 -                                        the header parameter size is too small.
 -                                     */
 -    char                *ad_m_name;   /* mac name for open fork */
 -    int                 ad_m_namelen;
 -    struct adouble_fops *ad_ops;
 -    u_int16_t       ad_open_forks;      /* open forks (by others) */
 +#define AD_CLOSED  0xadc10ced
  
 -#ifdef USE_MMAPPED_HEADERS
 -    char                *ad_data;
 -#else
 -    char        ad_data[AD_DATASZ_MAX];
 -#endif
 -};
 +struct adouble;
  
  struct adouble_fops {
 -    char *(*ad_path)(const char *, int);
 -    int  (*ad_mkrf)(char *);
 +    const char *(*ad_path)(const char *, int);
 +    int  (*ad_mkrf)(const char *);
      int  (*ad_rebuild_header)(struct adouble *);
 -    int  (*ad_check_header)(struct adouble *, struct stat *);
      int  (*ad_header_read)(struct adouble *, struct stat *);
 -    int  (*ad_header_upgrade)(struct adouble *, char *);
 +    int  (*ad_header_upgrade)(struct adouble *, const char *);
 +};
 +
 +struct adouble {
 +    u_int32_t           ad_magic;         /* Official adouble magic                   */
 +    u_int32_t           ad_version;       /* Official adouble version number          */
 +    char                ad_filler[16];
 +    struct ad_entry     ad_eid[ADEID_MAX];
 +    struct ad_fd        ad_data_fork;     /* the data fork                            */
 +    struct ad_fd        ad_resource_fork; /* adouble:v2 -> the adouble file           *
 +                                           * adouble:ea -> the rfork EA               */
 +    struct ad_fd        ad_metadata_fork; /* adouble:v2 -> unused                     *
 +                                           * adouble:ea -> the metadata EA            */
 +    struct ad_fd        *ad_md;           /* either ad_resource or ad_metadata        */
 +    int                 ad_flags;         /* Our adouble version info (AD_VERSION*)   */
 +    int                 ad_adflags;       /* ad_open flags adflags like ADFLAGS_DIR   */
 +    uint32_t            ad_inited;
 +    int                 ad_options;
 +    int                 ad_refcount;       /* multiple forks may open one adouble     */
 +    void                *ad_resforkbuf;    /* buffer for AD_VERSION_EA ressource fork */
 +    size_t              ad_resforkbufsize; /* size of ad_resforkbuf                   */
 +    off_t               ad_rlen;           /* ressource fork len with AFP 3.0         *
 +                                            * the header parameter size is too small. */
 +    char                *ad_m_name;        /* mac name for open fork                  */
 +    int                 ad_m_namelen;
 +    bstring             ad_fullpath;       /* fullpath of file, adouble:ea need this  */
 +    struct adouble_fops *ad_ops;
 +    uint16_t            ad_open_forks;     /* open forks (by others)                  */
 +    char                ad_data[AD_DATASZ_MAX];
  };
  
  #define ADFLAGS_DF        (1<<0)
 -#define ADFLAGS_HF        (1<<1)
 -#define ADFLAGS_DIR       (1<<2)
 -/*
 -#define ADFLAGS_NOADOUBLE (1<<3)
 -*/
 -#define ADFLAGS_V1COMPAT  (1<<4)
 -#define ADFLAGS_NOHF      (1<<5)  /* not an error if no ressource fork */
 -#define ADFLAGS_RDONLY    (1<<6)  /* don't try readwrite */
 -#define ADFLAGS_OPENFORKS (1<<7)  /* check for open fork in ad_metadata function */
 -#define ADFLAGS_RF        (1<<8)
 -#define ADFLAGS_MD        ADFLAGS_HF /* (1<<9) */
 -#define ADFLAGS_CREATE    (1<<9)
 -
 -/* adouble v2 cnid cache */
 +#define ADFLAGS_RF        (1<<1)
 +#define ADFLAGS_HF        (1<<2)
 +#define ADFLAGS_DIR       (1<<3)
 +#define ADFLAGS_NOHF      (1<<4)  /* not an error if no ressource fork */
 +#define ADFLAGS_CHECK_OF  (1<<6)  /* check for open forks from us and other afpd's */
 +
  #define ADVOL_NODEV      (1 << 0)
  #define ADVOL_CACHE      (1 << 1)
  #define ADVOL_UNIXPRIV   (1 << 2) /* adouble unix priv */
  #define ad_getentryoff(ad,eid)     ((ad)->ad_eid[(eid)].ade_off)
  #define ad_entry(ad,eid)           ((caddr_t)(ad)->ad_data + (ad)->ad_eid[(eid)].ade_off)
  
 -#define ad_get_HF_flags(ad) ((ad)->ad_resource_fork.adf_flags)
 +#define ad_get_RF_flags(ad) ((ad)->ad_resource_fork.adf_flags)
  #define ad_get_MD_flags(ad) ((ad)->ad_md->adf_flags)
  
 +/* Refcounting open forks using one struct adouble */
 +#define ad_ref(ad)   (ad)->ad_refcount++
 +#define ad_unref(ad) --((ad)->ad_refcount)
 +
  /* ad_flush.c */
  extern int ad_rebuild_adouble_header (struct adouble *);
  extern int ad_rebuild_sfm_header (struct adouble *);
@@@ -358,38 -446,44 +356,38 @@@ extern int ad_flush (struct adouble *)
  extern int ad_close (struct adouble *, int);
  
  /* ad_lock.c */
 -extern int ad_fcntl_lock    (struct adouble *, const u_int32_t /*eid*/,
 -                                 const int /*type*/, const off_t /*offset*/,
 -                                 const off_t /*len*/, const int /*user*/);
 -extern void ad_fcntl_unlock (struct adouble *, const int /*user*/);
 -extern int ad_fcntl_tmplock (struct adouble *, const u_int32_t /*eid*/,
 -                                 const int /*type*/, const off_t /*offset*/,
 -                                 const off_t /*len*/, const int /*user*/);
 -extern int ad_testlock      (struct adouble * /*adp*/, int /*eid*/, off_t /*off*/);
 -
 -extern u_int16_t ad_openforks (struct adouble * /*adp*/, u_int16_t);
 -extern int ad_excl_lock     (struct adouble * /*adp*/, const u_int32_t /*eid*/);
 -
 -#define ad_lock ad_fcntl_lock
 -#define ad_tmplock ad_fcntl_tmplock
 -#define ad_unlock ad_fcntl_unlock
 +extern int ad_testlock      (struct adouble *adp, int eid, off_t off);
 +extern uint16_t ad_openforks(struct adouble *adp, uint16_t);
 +extern int ad_excl_lock     (struct adouble *adp, uint32_t eid);
 +
 +extern int ad_lock(struct adouble *, uint32_t eid, int type, off_t off, off_t len, int user);
 +extern void ad_unlock(struct adouble *, int user);
 +extern int ad_tmplock(struct adouble *, uint32_t eid, int type, off_t off, off_t len, int user);
  
  /* ad_open.c */
 +extern const char *oflags2logstr(int oflags);
 +extern const char *adflags2logstr(int adflags);
  extern int ad_setfuid     (const uid_t );
  extern uid_t ad_getfuid   (void );
  extern char *ad_dir       (const char *);
 -extern char *ad_path      (const char *, int);
 -extern char *ad_path_osx  (const char *, int);
 -extern char *ad_path_ads  (const char *, int);
 -extern char *ad_path_sfm  (const char *, int);
 +extern const char *ad_path      (const char *, int);
 +extern const char *ad_path_ea   (const char *, int);
  extern int ad_mode        (const char *, int);
  extern int ad_mkdir       (const char *, int);
  extern void ad_init       (struct adouble *, int, int );
 -extern int ad_open        (const char *, int, int, int, struct adouble *);
 -extern int ad_openat      (int dirfd, const char *, int, int, int, struct adouble *);
 +extern int ad_open        (struct adouble *ad, const char *path, int adflags, ...);
 +extern int ad_openat      (struct adouble *, int dirfd, const char *path, int adflags, ...);
  extern int ad_refresh     (struct adouble *);
  extern int ad_stat        (const char *, struct stat *);
  extern int ad_metadata    (const char *, int, struct adouble *);
  extern int ad_metadataat  (int, const char *, int, struct adouble *);
  
 +#if 0
  #define ad_open_metadata(name, flags, mode, adp)\
 -   ad_open(name, ADFLAGS_MD|(flags), O_RDWR |(mode), 0666, (adp))
 +   ad_open(name, ADFLAGS_HF | (flags), O_RDWR |(mode), 0666, (adp))
 +#endif
  
 -#define ad_close_metadata(adp) ad_close( (adp), ADFLAGS_MD)
 +#define ad_close_metadata(adp) ad_close( (adp), ADFLAGS_HF)
  
  /* build a resource fork mode from the data fork mode:
   * remove X mode and extend header to RW if R or W (W if R for locking),
@@@ -416,43 -510,73 +414,43 @@@ static inline mode_t ad_hf_mode (mode_
      return mode;
  }
  
 -/* ad_ea.c */
 -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);
 -
  /* ad_read.c/ad_write.c */
  extern int     sys_ftruncate(int fd, off_t length);
 -
 -extern ssize_t ad_read (struct adouble *, const u_int32_t,
 -                            const off_t, char *, const size_t);
 -extern ssize_t ad_pread (struct ad_fd *, void *, size_t, off_t);
 -extern ssize_t ad_write (struct adouble *, const u_int32_t, off_t,
 -                             const int, const char *, const size_t);
 -extern ssize_t adf_pread  (struct ad_fd *, void *, size_t, off_t);
 -extern ssize_t adf_pwrite (struct ad_fd *, const void *, size_t, off_t);
 -extern int     ad_dtruncate (struct adouble *, const off_t);
 -extern int     ad_rtruncate (struct adouble *, const off_t);
 +extern ssize_t ad_read(struct adouble *, uint32_t, off_t, char *, size_t);
 +extern ssize_t ad_pread(struct ad_fd *, void *, size_t, off_t);
 +extern ssize_t ad_write(struct adouble *, uint32_t, off_t, int, const char *, size_t);
 +extern ssize_t adf_pread(struct ad_fd *, void *, size_t, off_t);
 +extern ssize_t adf_pwrite(struct ad_fd *, const void *, size_t, off_t);
 +extern int     ad_dtruncate(struct adouble *, off_t);
 +extern int     ad_rtruncate(struct adouble *, off_t);
  
  /* ad_size.c */
 -extern off_t ad_size (const struct adouble *, const u_int32_t );
 +extern off_t ad_size (const struct adouble *, uint32_t );
  
  /* ad_mmap.c */
 -extern void *ad_mmapread (struct adouble *, const u_int32_t,
 -                              const off_t, const size_t);
 -extern void *ad_mmapwrite (struct adouble *, const u_int32_t,
 -                               const off_t, const int, const size_t);
 +extern void *ad_mmapread(struct adouble *, uint32_t, off_t, size_t);
 +extern void *ad_mmapwrite(struct adouble *, uint32_t, off_t, int, size_t);
  #define ad_munmap(buf, len)  (munmap((buf), (len)))
  
  /* ad_date.c */
 -extern int ad_setdate (struct adouble *, unsigned int, u_int32_t);
 -extern int ad_getdate (const struct adouble *, unsigned int, u_int32_t *);
 +extern int ad_setdate(struct adouble *, unsigned int, uint32_t);
 +extern int ad_getdate(const struct adouble *, unsigned int, uint32_t *);
  
  /* ad_attr.c */
 -extern int       ad_setattr (const struct adouble *, const u_int16_t);
 -extern int       ad_getattr (const struct adouble *, u_int16_t *);
 -
 -/* Note: starting with Netatalk 2.1 we do NOT alway set the name */
 -extern int       ad_setname (struct adouble *, const char *);
 -
 -#if AD_VERSION == AD_VERSION2
 -extern int       ad_setid (struct adouble *, const dev_t dev,const ino_t ino, const u_int32_t, const u_int32_t, const void *);
 -extern u_int32_t ad_getid (struct adouble *, const dev_t, const ino_t, const cnid_t, const void *);
 -extern u_int32_t ad_forcegetid (struct adouble *adp);
 -#else
 -#define ad_setid(a, b, c)
 -#endif
 +extern int       ad_setattr(const struct adouble *, uint16_t);
 +extern int       ad_getattr(const struct adouble *, uint16_t *);
 +extern int       ad_setname(struct adouble *, const char *);
 +extern int       ad_setid(struct adouble *, dev_t dev, ino_t ino, uint32_t, uint32_t, const void *);
 +extern u_int32_t ad_getid(struct adouble *, dev_t, ino_t, cnid_t, const void *);
 +extern u_int32_t ad_forcegetid(struct adouble *adp);
  
  #ifdef WITH_SENDFILE
 -extern int ad_readfile_init(const struct adouble *ad, 
 -                                     const int eid, off_t *off,
 -                                     const int end);
 +extern int ad_readfile_init(const struct adouble *ad, int eid, off_t *off, int end);
  #endif
  
  #if 0
  #ifdef HAVE_SENDFILE_WRITE
 -extern ssize_t ad_writefile (struct adouble *, const int,
 -                                 const int, off_t, const int, const size_t);
 +extern ssize_t ad_writefile(struct adouble *, int, int, off_t, int, size_t);
  #endif /* HAVE_SENDFILE_WRITE */
  #endif /* 0 */