diff options
-rw-r--r-- | pico/osdep/filesys.c | 12 | ||||
-rw-r--r-- | pith/pine.hlp | 2 |
2 files changed, 12 insertions, 2 deletions
diff --git a/pico/osdep/filesys.c b/pico/osdep/filesys.c index af08726b..9d775d14 100644 --- a/pico/osdep/filesys.c +++ b/pico/osdep/filesys.c @@ -317,8 +317,18 @@ getfnames(char *dn, char *pat, int *n, char *e, size_t elen) /* * We'd like to use 512 * st_blocks as an initial estimate but * some systems have a stat struct with no st_blocks in it. + * + * In some systems the size of a directory is the sum of the + * sizes of all files contained in it, so sbuf.st_size might + * be too large and the malloc() might fail with error ENOMEM. + * Since this is just the list of files, and not the contents + * of the files, let us start with a small amount and resize + * when necessary. Reported by Sebasting Knust. Of course the + * correct solution is to read the directory twice, but keeping + * realloc()ing as needed also solves the problem in a less + * elegant way. */ - avail = alloced = MAX(sbuf.st_size, incr); + avail = alloced = 4096; if((sbuf.st_mode&S_IFMT) != S_IFDIR){ if(e) snprintf(e, elen, _("Not a directory: \"%s\""), dn); diff --git a/pith/pine.hlp b/pith/pine.hlp index cc8c8f55..e9fee1cd 100644 --- a/pith/pine.hlp +++ b/pith/pine.hlp @@ -140,7 +140,7 @@ with help text for the config screen and the composer that didn't have any reasonable place to be called from. Dummy change to get revision in pine.hlp ============= h_revision ================= -Alpine Commit 621 2021-11-22 18:19:28 +Alpine Commit 622 2021-11-23 10:53:56 ============= h_news ================= <HTML> <HEAD> |