/*
- * $Id: ad_open.c,v 1.30.6.11 2004-05-04 14:26:14 didg Exp $
+ * $Id: ad_open.c,v 1.30.6.12 2004-05-08 22:38:33 didg Exp $
*
* Copyright (c) 1999 Adrian Sun (asun@u.washington.edu)
* Copyright (c) 1990,1991 Regents of The University of Michigan.
if (!path || (ad->ad_flags != AD_VERSION2))
return 0;
+ if (!(ad->ad_hf.adf_flags & ( O_RDWR | O_WRONLY))) {
+ /* we were unable to open the file read write the last time
+ */
+ return 0;
+ }
+
if (ad->ad_eid[ADEID_RFORK].ade_off)
shiftdata = ADEDOFF_RFORK_V2 -ad->ad_eid[ADEID_RFORK].ade_off;
if (ad->ad_flags != AD_VERSION2)
return 0;
+ if (!(ad->ad_hf.adf_flags & ( O_RDWR | O_WRONLY))) {
+ /* we were unable to open the file read write the last time
+ */
+ return 0;
+ }
if (!ad->ad_flags) {
/* we don't really know what we want */
ad->ad_eid[ eid ].ade_len = len;
} else if (!warning) {
warning = 1;
- LOG(log_debug, logtype_default, "ad_refresh: nentries %hd eid %d\n",
+ LOG(log_debug, logtype_default, "ad_refresh: nentries %hd eid %d",
nentries, eid );
}
}
if (!ad_getentryoff(ad, ADEID_RFORK)
|| (ad_getentryoff(ad, ADEID_RFORK) > sizeof(ad->ad_data))
) {
- LOG(log_debug, logtype_default, "ad_header_read: problem with rfork entry offset.");
- return -1;
+ errno = EIO;
+ LOG(log_debug, logtype_default, "ad_header_read: problem with rfork entry offset.");
+ return -1;
}
if (ad_getentryoff(ad, ADEID_RFORK) > header_len) {
/* ----------------- */
static int ad_error(struct adouble *ad, int adflags)
{
+int err = errno;
if ((adflags & ADFLAGS_NOHF)) {
/* FIXME double check : set header offset ?*/
return 0;
}
if ((adflags & ADFLAGS_DF)) {
ad_close( ad, ADFLAGS_DF );
+ err = errno;
}
return -1 ;
}
* instead of reading it.
*/
if (new_rfork(path, ad, adflags) < 0) {
+ int err = errno;
/* the file is already deleted, perm, whatever, so return an error*/
ad_close(ad, adflags);
+ errno = err;
return -1;
}
} else {
|| (ad_v1tov2(ad, ad_p) < 0) || (ad_update(ad, ad_p) < 0)
#endif /* AD_VERSION == AD_VERSION2 */
) {
+ int err = errno;
+
ad_close( ad, adflags );
- return( -1 );
+ errno = err;
+ return -1;
}
}
return 0 ;