> Bruce Momjian <pgman@candle.pha.pa.us> writes:
>
> > + if (temp_de->d_type == DT_REG)
>
> The d_type field, and the corresponding macros such as DT_REG, are not
> portable.
>
> The only portable field in the dirent structure is d_name.
>
> If you want to be really really super portable, you have to think
> about supporting direct.h and other header files. See AC_DIR_HEADER
> and AC_HEADER_DIRENT in the autoconf documentation. But these days
> probably every OS of interest supports dirent.h, which is defined by
> POSIX.
Seems Vadim already added readdir() that does similar work for WAL
files in xlog.c:
while ((xlde = readdir(xldir)) != NULL)
{
if (strlen(xlde->d_name) == 16 &&
strspn(xlde->d_name, "0123456789ABCDEF") == 16 &&
strcmp(xlde->d_name, lastoff) <= 0)
{
elog(LOG, "MoveOfflineLogs: %s %s", (XLOG_archive_dir[0]) ?
"archive" : "remove", xlde->d_name);
sprintf(path, "%s%c%s", XLogDir, SEP_CHAR, xlde->d_name);
if (XLOG_archive_dir[0] == 0)
unlink(path);
}
errno = 0;
}
I will remove the _REG test and add the strspn test he has:
if (strspn(temp_de->d_name, "0123456789.") ==
strlen(temp_de->dname))
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026