X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libatalk%2Fadouble%2Fad_write.c;h=97667d476afdf2b27bbbf21fcb878d8d53a78c51;hb=4540def42682f2163ef4d41590b8ae7c28cd5cb5;hp=a142ef00fa47ac954beb6765e164085298b1123d;hpb=816ca87d4a2b47b5be9c29b372f28099ae75c67a;p=netatalk.git diff --git a/libatalk/adouble/ad_write.c b/libatalk/adouble/ad_write.c index a142ef00..97667d47 100644 --- a/libatalk/adouble/ad_write.c +++ b/libatalk/adouble/ad_write.c @@ -162,14 +162,25 @@ char c = 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)