version 1.38, 2022/05/01 23:20:30 |
version 1.39, 2023/03/02 06:41:56 |
|
|
{ |
{ |
FILE *fp; |
FILE *fp; |
char tmp[PATH_MAX]; |
char tmp[PATH_MAX]; |
int r; |
int r, writeok, closeok; |
|
|
r = snprintf(tmp, sizeof(tmp), "%s.XXXXXXXXXX", cpfile); |
r = snprintf(tmp, sizeof(tmp), "%s.XXXXXXXXXX", cpfile); |
if (r < 0 || r >= PATH_MAX) { |
if (r < 0 || r >= PATH_MAX) { |
|
|
close(r); |
close(r); |
return; |
return; |
} |
} |
if (fprintf(fp, "%lu\n", (unsigned long)lineno) > 0 && fclose(fp) == 0 |
writeok = (fprintf(fp, "%lu\n", (unsigned long)lineno) > 0); |
&& rename(tmp, cpfile) == 0) |
closeok = (fclose(fp) == 0); |
|
if (writeok && closeok && 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 { |
logit("failed to write to checkpoint file '%s': %s", cpfile, |
logit("failed to write to checkpoint file '%s': %s", cpfile, |
strerror(errno)); |
strerror(errno)); |
|
(void)unlink(tmp); |
|
} |
} |
} |
|
|
static unsigned long |
static unsigned long |