X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=src%2Fapp-framework-main.git;a=blobdiff_plain;f=src%2Fafm-db.c;h=a15255b9cfa892a8d623d119fbf3f04d81b8c89e;hp=638713e9bb685645d6b6d9b427dad8414139af21;hb=c07d1ea01ae008dc5aa379932b1d2da90d7d291c;hpb=3a6e947bef1b2942e24d2fdee1a76dbf3305b508 diff --git a/src/afm-db.c b/src/afm-db.c index 638713e..a15255b 100644 --- a/src/afm-db.c +++ b/src/afm-db.c @@ -231,7 +231,7 @@ static int enumentries(struct enumdata *data, int (*callto)(struct enumdata *)) DIR *dir; int rc; char *beg; - struct dirent entry, *e; + struct dirent *e; size_t len; /* opens the directory */ @@ -244,24 +244,28 @@ static int enumentries(struct enumdata *data, int (*callto)(struct enumdata *)) *beg++ = '/'; /* enumerate entries */ - rc = readdir_r(dir, &entry, &e); - while (!rc && e) { - if (entry.d_name[0] != '.' || (entry.d_name[1] - && (entry.d_name[1] != '.' || entry.d_name[2]))) { + for(;;) { + errno = 0; + e = readdir(dir); + if (!e) { + rc = !errno - 1; + break; + } + if (e->d_name[0] != '.' || (e->d_name[1] + && (e->d_name[1] != '.' || e->d_name[2]))) { /* prepare callto */ - len = strlen(entry.d_name); + len = strlen(e->d_name); if (beg + len >= data->path + sizeof data->path) { errno = ENAMETOOLONG; return -1; } - data->length = (int)(stpcpy(beg, entry.d_name) + data->length = (int)(stpcpy(beg, e->d_name) - data->path); /* call the function */ rc = callto(data); if (rc) break; } - rc = readdir_r(dir, &entry, &e); } closedir(dir); return rc;