]> arthur.barton.de Git - netatalk.git/blobdiff - etc/afpd/fork.c
Merge branch 'release-3-0-alpha2'
[netatalk.git] / etc / afpd / fork.c
index b2e09193572eda2bf57d2600d8205d6d4c2de467..2216a45c1b32a0d40be5b89698a9a95bc8553ffc 100644 (file)
@@ -574,15 +574,8 @@ int afp_setforkparams(AFPObj *obj, char *ibuf, size_t ibuflen, char *rbuf _U_, s
             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)
@@ -886,22 +879,22 @@ static int read_fork(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf, si
         /* due to the nature of afp packets, we have to exit if we get
            an error. we can't do this with translation on. */
 #ifdef WITH_SENDFILE
-        int fd;
-
-        fd = ad_readfile_init(ofork->of_ad, eid, &offset, 0);
-
-        if (dsi_stream_read_file(dsi, fd, offset, dsi->datasize) < 0) {
-            if (errno == EINVAL || errno == ENOSYS)
-                goto afp_read_loop;
-            else {
-                LOG(log_error, logtype_afpd, "afp_read(%s): ad_readfile: %s", of_name(ofork), strerror(errno));
-                goto afp_read_exit;
+        if (!(obj->options.flags & OPTION_NOSENDFILE)) {
+            int fd = ad_readfile_init(ofork->of_ad, eid, &offset, 0);
+            if (dsi_stream_read_file(dsi, fd, offset, dsi->datasize) < 0) { 
+               switch (errno) {
+                case EINVAL:
+                case ENOSYS:
+                    goto afp_read_loop;
+                default:
+                    LOG(log_error, logtype_afpd, "afp_read(%s): ad_readfile: %s", of_name(ofork), strerror(errno));
+                    goto afp_read_exit;
+                }
             }
-        }
-
-        dsi_readdone(dsi);
-        goto afp_read_done;
 
+            dsi_readdone(dsi);
+            goto afp_read_done;
+        }
     afp_read_loop:
 #endif
 
@@ -1215,29 +1208,27 @@ static int write_fork(AFPObj *obj, char *ibuf, size_t ibuflen _U_, char *rbuf, s
     offset += cc;
 
 #if 0 /*def HAVE_SENDFILE_WRITE*/
-    if (!(obj->options.flags & OPTION_DEBUG)) {
-        if ((cc = ad_writefile(ofork->of_ad, eid, dsi->socket,
-                               offset, dsi->datasize)) < 0) {
-            switch (errno) {
-            case EDQUOT :
-            case EFBIG :
-            case ENOSPC :
-                cc = AFPERR_DFULL;
-                break;
-            default :
-                LOG(log_error, logtype_afpd, "afp_write: ad_writefile: %s", strerror(errno) );
-                goto afp_write_loop;
-            }
-            dsi_writeflush(dsi);
-            *rbuflen = 0;
-            ad_tmplock(ofork->of_ad, eid, ADLOCK_CLR, saveoff,
-                       reqcount,  ofork->of_refnum);
-            return cc;
+    if ((cc = ad_writefile(ofork->of_ad, eid, dsi->socket,
+                           offset, dsi->datasize)) < 0) {
+        switch (errno) {
+        case EDQUOT:
+        case EFBIG:
+        case ENOSPC:
+            cc = AFPERR_DFULL;
+            break;
+        default:
+            LOG(log_error, logtype_afpd, "afp_write: ad_writefile: %s", strerror(errno) );
+            goto afp_write_loop;
         }
-
-        offset += cc;
-        goto afp_write_done;
+        dsi_writeflush(dsi);
+        *rbuflen = 0;
+        ad_tmplock(ofork->of_ad, eid, ADLOCK_CLR, saveoff,
+                   reqcount,  ofork->of_refnum);
+        return cc;
     }
+
+    offset += cc;
+    goto afp_write_done;
 #endif /* 0, was HAVE_SENDFILE_WRITE */
 
     /* loop until everything gets written. currently