]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/adouble/ad_flush.c
Allow opening symlinks r/w, but don't actually allow writing. Fixes test426
[netatalk.git] / libatalk / adouble / ad_flush.c
index 3569e8695633e805d16c7aff6efd264f5e3eabe5..5d99227a6fec5b6835319dc2bf81544c08756816 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: ad_flush.c,v 1.13 2010-02-10 14:05:37 franklahm Exp $
+ * $Id: ad_flush.c,v 1.14 2010-03-30 12:55:26 franklahm Exp $
  *
  * Copyright (c) 1990,1991 Regents of The University of Michigan.
  * All Rights Reserved.
@@ -198,15 +198,15 @@ int ad_close( struct adouble *ad, int adflags)
 {
     int         err = 0;
 
-    if (( adflags & ADFLAGS_DF ) && ad_data_fileno(ad) != -1 &&
-        !(--ad->ad_data_fork.adf_refcount)) {
-        if (ad->ad_data_fork.adf_syml!=0){
+    if ((adflags & ADFLAGS_DF)
+        && ad_data_fileno(ad) >= 0
+        && --ad->ad_data_fork.adf_refcount == 0) {
+        if (ad->ad_data_fork.adf_syml !=0) {
             free(ad->ad_data_fork.adf_syml);
-            ad->ad_data_fork.adf_syml=0;
-        }else{     
-        if ( close( ad_data_fileno(ad) ) < 0 ) {
-            err = -1;
-        }
+            ad->ad_data_fork.adf_syml = 0;
+        } else {
+            if ( close( ad_data_fileno(ad) ) < 0 )
+                err = -1;
         }
         ad_data_fileno(ad) = -1;
         adf_lock_free(&ad->ad_data_fork);