]> 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 a938331521874ea4bb48969ad5aa5a61d7261ea7..5d99227a6fec5b6835319dc2bf81544c08756816 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: ad_flush.c,v 1.12 2009-10-13 22:55:37 didg 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,10 +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 ( close( ad_data_fileno(ad) ) < 0 ) {
-            err = -1;
+    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_data_fileno(ad) = -1;
         adf_lock_free(&ad->ad_data_fork);