/*
- * $Id: ad_flush.c,v 1.11 2009-09-14 10:04:16 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.
}
-int ad_flush( ad )
- struct adouble *ad;
+int ad_flush( struct adouble *ad)
{
int len;
}
/* use refcounts so that we don't have to re-establish fcntl locks. */
-int ad_close( ad, adflags )
- struct adouble *ad;
- int adflags;
+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);