version 1.24, 2011/10/16 15:51:39 |
version 1.25, 2011/10/19 00:06:10 |
|
|
write_checkpoint(char *cpfile, u_int32_t lineno) |
write_checkpoint(char *cpfile, u_int32_t lineno) |
{ |
{ |
FILE *fp; |
FILE *fp; |
char tmpfile[MAXPATHLEN]; |
char tmp[MAXPATHLEN]; |
int r; |
int r; |
|
|
r = snprintf(tmpfile, sizeof(tmpfile), "%s.XXXXXXXXXX", cpfile); |
r = snprintf(tmp, sizeof(tmp), "%s.XXXXXXXXXX", cpfile); |
if (r == -1 || r >= MAXPATHLEN) { |
if (r == -1 || r >= MAXPATHLEN) { |
logit("write_checkpoint: temp pathname too long"); |
logit("write_checkpoint: temp pathname too long"); |
return; |
return; |
} |
} |
if ((r = mkstemp(tmpfile)) == -1) { |
if ((r = mkstemp(tmp)) == -1) { |
logit("mkstemp(%s): %s", tmpfile, strerror(errno)); |
logit("mkstemp(%s): %s", tmp, strerror(errno)); |
return; |
return; |
} |
} |
if ((fp = fdopen(r, "w")) == NULL) { |
if ((fp = fdopen(r, "w")) == NULL) { |
|
|
return; |
return; |
} |
} |
if (fprintf(fp, "%lu\n", (unsigned long)lineno) > 0 && fclose(fp) == 0 |
if (fprintf(fp, "%lu\n", (unsigned long)lineno) > 0 && fclose(fp) == 0 |
&& rename(tmpfile, cpfile) == 0) |
&& rename(tmp, cpfile) == 0) |
debug3("wrote checkpoint line %lu to '%s'", |
debug3("wrote checkpoint line %lu to '%s'", |
(unsigned long)lineno, cpfile); |
(unsigned long)lineno, cpfile); |
else |
else |