|
|
@ -32,6 +32,7 @@ static char *Xflag;
|
|
|
|
char *targetdir;
|
|
|
|
char *targetdir;
|
|
|
|
long delivery;
|
|
|
|
long delivery;
|
|
|
|
int preserve_mtime;
|
|
|
|
int preserve_mtime;
|
|
|
|
|
|
|
|
int try_rename;
|
|
|
|
|
|
|
|
|
|
|
|
char host[64];
|
|
|
|
char host[64];
|
|
|
|
void
|
|
|
|
void
|
|
|
@ -47,7 +48,7 @@ gethost() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
int
|
|
|
|
deliver(FILE *infile)
|
|
|
|
deliver(char *infilename, FILE *infile)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int outfd;
|
|
|
|
int outfd;
|
|
|
|
FILE *outfile;
|
|
|
|
FILE *outfile;
|
|
|
@ -86,6 +87,16 @@ tryagain:
|
|
|
|
|
|
|
|
|
|
|
|
snprintf(tmp, sizeof tmp, "%s/tmp/%s", targetdir, id);
|
|
|
|
snprintf(tmp, sizeof tmp, "%s/tmp/%s", targetdir, id);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (try_rename) {
|
|
|
|
|
|
|
|
snprintf(dst, sizeof dst, "%s/%s/%s:2,%s",
|
|
|
|
|
|
|
|
targetdir, cflag ? "cur" : "new", id, Xflag);
|
|
|
|
|
|
|
|
if (rename(infilename, dst) == 0) {
|
|
|
|
|
|
|
|
if (vflag)
|
|
|
|
|
|
|
|
printf("%s\n", dst);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
struct stat st;
|
|
|
|
struct stat st;
|
|
|
|
if (fstat(fileno(infile), &st) < 0)
|
|
|
|
if (fstat(fileno(infile), &st) < 0)
|
|
|
|
st.st_mode = 0600;
|
|
|
|
st.st_mode = 0600;
|
|
|
@ -227,13 +238,13 @@ refile(char *file)
|
|
|
|
else
|
|
|
|
else
|
|
|
|
Xflag = "";
|
|
|
|
Xflag = "";
|
|
|
|
|
|
|
|
|
|
|
|
if (deliver(f) < 0) {
|
|
|
|
if (deliver(file, f) < 0) {
|
|
|
|
perror("mrefile");
|
|
|
|
perror("mrefile");
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fclose(f);
|
|
|
|
fclose(f);
|
|
|
|
if (!kflag)
|
|
|
|
if (!kflag && !try_rename)
|
|
|
|
unlink(file);
|
|
|
|
unlink(file);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -245,11 +256,12 @@ main(int argc, char *argv[])
|
|
|
|
|
|
|
|
|
|
|
|
cflag = 1; // use cur/
|
|
|
|
cflag = 1; // use cur/
|
|
|
|
preserve_mtime = 1;
|
|
|
|
preserve_mtime = 1;
|
|
|
|
|
|
|
|
try_rename = 1;
|
|
|
|
|
|
|
|
|
|
|
|
int c;
|
|
|
|
int c;
|
|
|
|
while ((c = getopt(argc, argv, "kv")) != -1)
|
|
|
|
while ((c = getopt(argc, argv, "kv")) != -1)
|
|
|
|
switch (c) {
|
|
|
|
switch (c) {
|
|
|
|
case 'k': kflag = 1; break;
|
|
|
|
case 'k': kflag = 1; try_rename = 0; break;
|
|
|
|
case 'v': vflag = 1; break;
|
|
|
|
case 'v': vflag = 1; break;
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
usage:
|
|
|
|
usage:
|
|
|
@ -296,7 +308,7 @@ usage:
|
|
|
|
|
|
|
|
|
|
|
|
gethost();
|
|
|
|
gethost();
|
|
|
|
|
|
|
|
|
|
|
|
if (deliver(stdin) < 0) {
|
|
|
|
if (deliver(0, stdin) < 0) {
|
|
|
|
perror("mdeliver");
|
|
|
|
perror("mdeliver");
|
|
|
|
return 2;
|
|
|
|
return 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|