isc_dir_init(&dir);
result = isc_dir_open(&dir, dirname);
- /*
- * Replace the file separator if it was taken out.
- */
- if (bname != file->name) {
- *(bname - 1) = sep;
- }
-
/*
* Return if the directory open failed.
*/
if (result != ISC_R_SUCCESS) {
- return (result);
+ goto out;
}
while (isc_dir_read(&dir) == ISC_R_SUCCESS) {
* Remove any backup files that exceed versions.
*/
if (*digit_end == '\0' && version >= versions) {
- result = isc_file_remove(dir.entry.name);
+ char rmfile[PATH_MAX + 1];
+ int n = snprintf(rmfile, sizeof(rmfile),
+ "%s/%s", dirname,
+ dir.entry.name);
+ if (n >= (int)sizeof(rmfile) || n < 0) {
+ result = ISC_R_NOSPACE;
+ syslog(LOG_ERR,
+ "unable to remove log files: %s",
+ isc_result_totext(result));
+ break;
+ }
+ result = isc_file_remove(rmfile);
if (result != ISC_R_SUCCESS &&
- result != ISC_R_FILENOTFOUND)
+ result != ISC_R_NOTFOUND)
{
syslog(LOG_ERR,
- "unable to remove "
- "log file '%s': %s",
- dir.entry.name,
+ "unable to remove log file "
+ "'%s': %s",
+ rmfile,
isc_result_totext(result));
}
} else if (*digit_end == '\0' && version > greatest) {
isc_dir_close(&dir);
*greatestp = greatest;
+ result = ISC_R_SUCCESS;
- return (ISC_R_SUCCESS);
+out:
+ /*
+ * Replace the file separator if it was taken out.
+ */
+ if (bname != file->name) {
+ *(bname - 1) = sep;
+ }
+ return (result);
}
static void
isc_dir_init(&dir);
result = isc_dir_open(&dir, dirname);
- /*
- * Replace the file separator if it was taken out.
- */
- if (bname != file->name) {
- *(bname - 1) = sep;
- }
-
/*
* Return if the directory open failed.
*/
if (result != ISC_R_SUCCESS) {
- return (result);
+ goto out;
}
last = last_to_keep(versions, &dir, bname, bnamelen);
* Remove any backup files that exceed versions.
*/
if (*digit_end == '\0' && version < last) {
- result = isc_file_remove(dir.entry.name);
+ char rmfile[PATH_MAX + 1];
+ int n = snprintf(rmfile, sizeof(rmfile),
+ "%s/%s", dirname,
+ dir.entry.name);
+ if (n >= (int)sizeof(rmfile) || n < 0) {
+ result = ISC_R_NOSPACE;
+ syslog(LOG_ERR,
+ "unable to remove log files: %s",
+ isc_result_totext(result));
+ break;
+ }
+ result = isc_file_remove(rmfile);
if (result != ISC_R_SUCCESS &&
- result != ISC_R_FILENOTFOUND)
+ result != ISC_R_NOTFOUND)
{
syslog(LOG_ERR,
- "unable to remove "
- "log file '%s': %s",
- dir.entry.name,
+ "unable to remove log file "
+ "'%s': %s",
+ rmfile,
isc_result_totext(result));
}
}
}
isc_dir_close(&dir);
+ result = ISC_R_SUCCESS;
- return (ISC_R_SUCCESS);
+out:
+ /*
+ * Replace the file separator if it was taken out.
+ */
+ if (bname != file->name) {
+ *(bname - 1) = sep;
+ }
+ return (result);
}
static isc_result_t