if (!root_mounted || dir[0] != '/') {
cancel_receive ();
- reply_with_error ("tar-in: root must be mounted and path must be absolute");
+ reply_with_error ("root must be mounted and path must be absolute");
return -1;
}
if (pclose (fp) != 0) {
err = errno;
- cancel_receive ();
+ if (r == -1) /* if r == 0, file transfer ended already */
+ cancel_receive ();
errno = err;
reply_with_perror ("pclose: %s", dir);
return -1;
return -1;
}
- send_file_end (0); /* Normal end of file. */
+ if (send_file_end (0)) /* Normal end of file. */
+ return -1;
+
return 0;
}
if (!root_mounted || dir[0] != '/') {
cancel_receive ();
- reply_with_error ("tar-in: root must be mounted and path must be absolute");
+ reply_with_error ("root must be mounted and path must be absolute");
return -1;
}
if (pclose (fp) != 0) {
err = errno;
- cancel_receive ();
+ if (r == -1) /* if r == 0, file transfer ended already */
+ cancel_receive ();
errno = err;
reply_with_perror ("pclose: %s", dir);
return -1;
return -1;
}
- send_file_end (0); /* Normal end of file. */
+ if (send_file_end (0)) /* Normal end of file. */
+ return -1;
+
return 0;
}