diff options
| -rw-r--r-- | src/libstddjb/sals.c | 35 |
1 files changed, 16 insertions, 19 deletions
diff --git a/src/libstddjb/sals.c b/src/libstddjb/sals.c index 839df6d..f6b2aa1 100644 --- a/src/libstddjb/sals.c +++ b/src/libstddjb/sals.c @@ -13,27 +13,24 @@ int sals (char const *fn, stralloc *sa, size_t *x) size_t sabase = sa->len ; size_t maxlen = 0 ; DIR *dir = opendir(fn) ; - if (dir) + if (!dir) return -1 ; + for (;;) { - for (;;) - { - direntry *d ; - size_t len ; - errno = 0 ; - d = readdir(dir) ; - if (!d) break ; - if (d->d_name[0] == '.') - if (((d->d_name[1] == '.') && !d->d_name[2]) || !d->d_name[1]) - continue ; - len = strlen(d->d_name) ; - if (len > maxlen) maxlen = len ; - if (!stralloc_catb(sa, d->d_name, len+1)) goto err ; - n++ ; - } - if (errno) goto err ; - dir_close(dir) ; + direntry *d ; + size_t len ; + errno = 0 ; + d = readdir(dir) ; + if (!d) break ; + if (d->d_name[0] == '.') + if (((d->d_name[1] == '.') && !d->d_name[2]) || !d->d_name[1]) + continue ; + len = strlen(d->d_name) ; + if (len > maxlen) maxlen = len ; + if (!stralloc_catb(sa, d->d_name, len+1)) goto err ; + n++ ; } - else if (errno != ENOENT) return -1 ; + if (errno) goto err ; + dir_close(dir) ; if (x) *x = maxlen ; return n ; |
