]> arthur.barton.de Git - netatalk.git/commitdiff
Use define AD_SYMLINK for symlinks
authorFrank Lahm <franklahm@googlemail.com>
Sun, 29 Apr 2012 12:10:40 +0000 (14:10 +0200)
committerFrank Lahm <franklahm@googlemail.com>
Sun, 29 Apr 2012 12:10:40 +0000 (14:10 +0200)
etc/afpd/fork.c
include/atalk/adouble.h
libatalk/adouble/ad_flush.c
libatalk/adouble/ad_lock.c
libatalk/adouble/ad_open.c
libatalk/adouble/ad_write.c

index 58eb9b673f956d5bc481256bf66234d80f3226af..c09ff578970a52b7c52eddfb4ca5cc764e7c680d 100644 (file)
@@ -165,7 +165,7 @@ static int fork_setmode(const AFPObj *obj, struct adouble *adp, int eid, int acc
 
         int fd = (eid == ADEID_DFORK) ? ad_data_fileno(adp) : ad_reso_fileno(adp);
 
-        if (fd != -1 && fd != -2 && fcntl(fd, F_SHARE, &shmd) != 0) {
+        if (fd != -1 && fd != AD_SYMLINK && fcntl(fd, F_SHARE, &shmd) != 0) {
             LOG(log_debug, logtype_afpd, "fork_setmode: fcntl: %s", strerror(errno));
             errno = EACCES;
             return -1;
index f95279d7aa7779ada385ea7642799aad682b832e..44409ee2b184d197712a759547269d09c75ea065 100644 (file)
 #define ADEDOFF_FINDERI_OSX  (AD_HEADER_LEN + ADEID_NUM_OSX*AD_ENTRY_LEN)
 #define ADEDOFF_RFORK_OSX    (ADEDOFF_FINDERI_OSX + ADEDLEN_FINDERI)
 
+/* special fd value used to indicate an open fork file is a (not open) symlink */
+#define AD_SYMLINK -2
+
 typedef uint32_t cnid_t;
 
 struct ad_entry {
@@ -169,7 +172,7 @@ typedef struct adf_lock_t {
 } adf_lock_t;
 
 struct ad_fd {
-    int          adf_fd;        /* -1: invalid, -2: symlink */
+    int          adf_fd;        /* -1: invalid, AD_SYMLINK: symlink */
     char         *adf_syml;
     int          adf_flags;
     adf_lock_t   *adf_lock;
@@ -348,7 +351,7 @@ struct adouble {
 #define ad_reso_fileno(ad)  ((ad)->ad_rfp->adf_fd)
 #define ad_meta_fileno(ad)  ((ad)->ad_mdp->adf_fd)
 
-/* -1 means not open, -2 is a symlink */
+/* -1: not open, AD_SYMLINK (-2): it's a symlink */
 #define AD_DATA_OPEN(ad) ((ad)->ad_data_fork.adf_fd >= 0)
 #define AD_META_OPEN(ad) ((ad)->ad_mdp->adf_fd >= 0)
 #define AD_RSRC_OPEN(ad) ((ad)->ad_rfp->adf_fd >= 0)
index 86a624e069cd4f7d557be7c545a7da4ef5ecd24b..eaf904cac77ab597d57e89ee0699a68d8788db01 100644 (file)
@@ -371,7 +371,7 @@ static int ad_data_closefd(struct adouble *ad)
 {
     int ret = 0;
 
-    if (ad_data_fileno(ad) == -2) {
+    if (ad_data_fileno(ad) == AD_SYMLINK) {
         free(ad->ad_data_fork.adf_syml);
         ad->ad_data_fork.adf_syml = NULL;
     } else {
@@ -408,7 +408,7 @@ int ad_close(struct adouble *ad, int adflags)
         adflags |= ADFLAGS_HF;
 
     if ((adflags & ADFLAGS_DF)
-        && (ad_data_fileno(ad) >= 0 || ad_data_fileno(ad) == -2) /* -2 means symlink */
+        && (ad_data_fileno(ad) >= 0 || ad_data_fileno(ad) == AD_SYMLINK)
         && --ad->ad_data_fork.adf_refcount == 0) {
         if (ad_data_closefd(ad) < 0)
             err = -1;
index bdae8dc473ad11c99fef7913c11a5503dde1cb7f..92f0ab89224501331c5a010dd323196ced0258b3 100644 (file)
@@ -71,8 +71,7 @@ static int set_lock(int fd, int cmd,  struct flock *lock)
         shmdstrfromoff(lock->l_start),
         (intmax_t)lock->l_len);
 
-    if (fd == -2) {
-        /* We assign fd = -2 for symlinks -> do nothing */
+    if (fd == AD_SYMLINK) {
         if (cmd == F_GETLK)
             lock->l_type = F_UNLCK;
         return 0;
index 79016b5feac43e1d6fed2110e2d5e320610470e9..bde46e57d7c2f42eb411f43ed38d9e3b03b4d211 100644 (file)
@@ -869,7 +869,7 @@ static int ad_open_df(const char *path, int adflags, mode_t mode, struct adouble
                 EC_FAIL;
             }
             ad->ad_data_fork.adf_syml[lsz] = 0;
-            ad->ad_data_fork.adf_fd = -2; /* -2 means its a symlink */
+            ad->ad_data_fork.adf_fd = AD_SYMLINK;
             break;
         default:
             EC_FAIL;
@@ -1041,7 +1041,7 @@ static int ad_open_hf_ea(const char *path, int adflags, int mode, struct adouble
 
     oflags = O_NOFOLLOW | (ad2openflags(ad, ADFLAGS_DF, adflags) & ~(O_CREAT | O_TRUNC));
 
-    if (ad_meta_fileno(ad) == -2)
+    if (ad_meta_fileno(ad) == AD_SYMLINK)
         /* symlink */
         EC_EXIT;
 
index 08554a274ae6f48d1ac940d826a5d1306d91b7f5..bfed9b400f27f8fd577310bc4052a76e2e6a5017 100644 (file)
@@ -55,8 +55,7 @@ ssize_t ad_write(struct adouble *ad, uint32_t eid, off_t off, int end, const cha
     size_t roundup;
     off_t    r_off;
 
-    if (ad_data_fileno(ad) == -2) {
-        /* It's a symlink */
+    if (ad_data_fileno(ad) == AD_SYMLINK) {
         errno = EACCES;
         return -1;
     }