version 1.249, 2017/05/05 15:17:32 |
version 1.250, 2017/05/17 22:27:12 |
Line 2122 dbwrite(struct dba *dba) |
|
Line 2122 dbwrite(struct dba *dba) |
|
int status; |
int status; |
pid_t child; |
pid_t child; |
|
|
|
/* |
|
* Do not write empty databases, and delete existing ones |
|
* when makewhatis -u causes them to become empty. |
|
*/ |
|
|
|
dba_array_start(dba->pages); |
|
if (dba_array_next(dba->pages) == NULL) { |
|
if (unlink(MANDOC_DB) == -1) |
|
say(MANDOC_DB, "&unlink"); |
|
return; |
|
} |
|
|
|
/* |
|
* Build the database in a temporary file, |
|
* then atomically move it into place. |
|
*/ |
|
|
if (dba_write(MANDOC_DB "~", dba) != -1) { |
if (dba_write(MANDOC_DB "~", dba) != -1) { |
if (rename(MANDOC_DB "~", MANDOC_DB) == -1) { |
if (rename(MANDOC_DB "~", MANDOC_DB) == -1) { |
exitcode = (int)MANDOCLEVEL_SYSERR; |
exitcode = (int)MANDOCLEVEL_SYSERR; |
Line 2130 dbwrite(struct dba *dba) |
|
Line 2147 dbwrite(struct dba *dba) |
|
} |
} |
return; |
return; |
} |
} |
|
|
|
/* |
|
* We lack write permission and cannot replace the database |
|
* file, but let's at least check whether the data changed. |
|
*/ |
|
|
(void)strlcpy(tfn, "/tmp/mandocdb.XXXXXXXX", sizeof(tfn)); |
(void)strlcpy(tfn, "/tmp/mandocdb.XXXXXXXX", sizeof(tfn)); |
if (mkdtemp(tfn) == NULL) { |
if (mkdtemp(tfn) == NULL) { |