ad_tmplock(ofork->of_ad, eid, ADLOCK_WR, size, st_size -size, ofork->of_refnum) < 0) {
goto afp_setfork_err;
}
- if (ofork->of_ad->ad_vers == AD_VERSION_EA) {
-#if HAVE_EAFD
- err = sys_lremovexattr(of_name(ofork), AD_EA_RESO);
-#else
- err = unlink(ofork->of_vol->ad_path(of_name(ofork), 0));
-#endif
- } else {
- err = ad_rtruncate(ofork->of_ad, size);
- }
+
+ err = ad_rtruncate(ofork->of_ad, size);
if (st_size > size)
ad_tmplock(ofork->of_ad, eid, ADLOCK_CLR, size, st_size -size, ofork->of_refnum);
if (err < 0)
/* ------------------------ */
int ad_rtruncate( struct adouble *ad, const off_t size)
{
- if (sys_ftruncate(ad_reso_fileno(ad), size + ad->ad_eid[ ADEID_RFORK ].ade_off ) < 0 ) {
- LOG(log_error, logtype_default, "sys_ftruncate: %s", strerror(errno));
- return -1;
+ EC_INIT;
+
+ if (ad->ad_vers == AD_VERSION_EA && size == 0) {
+#if HAVE_EAFD
+ EC_NEG1( sys_lremovexattr(of_name(ofork), AD_EA_RESO) );
+#else
+ EC_NEG1( unlink(ad->ad_ops->ad_path(ad->ad_name, 0)) );
+#endif
}
- ad->ad_rlen = size;
+ EC_NEG1( sys_ftruncate(ad_reso_fileno(ad), size + ad->ad_eid[ ADEID_RFORK ].ade_off) );
- return 0;
+EC_CLEANUP:
+ if (ret == 0)
+ ad->ad_rlen = size;
+ else
+ LOG(log_error, logtype_default, "ad_rtruncate(\"%s\"): %s",
+ fullpathname(ad->ad_name), strerror(errno));
+ EC_EXIT;
}
int ad_dtruncate(struct adouble *ad, const off_t size)