2023-08-13 Paul Eggert <eggert@cs.ucla.edu>
+ fts: improve memory-allocation errno handling
+ * lib/fts.c (fts_read, fts_build): When enter_dir or setup_dir
+ fails, report its errno value back to the user.
+ (internal_function): Preserve errno.
+ * modules/fts (Depends-on): Add calloc-posix, free-posix,
+ malloc-posix, and realloc-posix, for better errno handling
+ on allocation failures.
+
hash: set errno on failure
* lib/hash.c: Include errno.h.
(compute_bucket_size, hash_initialize, hash_rehash)
fts_load(sp, p);
if (! setup_dir(sp)) {
free_dir(sp);
- __set_errno (ENOMEM);
return (NULL);
}
goto check_for_dir;
sp->fts_dev = p->fts_statp->st_dev;
Dprintf ((" entering: %s\n", p->fts_path));
if (! enter_dir (sp, p))
- {
- __set_errno (ENOMEM);
- return NULL;
- }
+ return NULL;
}
return p;
}
cur->fts_info = FTS_D;
else if (! enter_dir (sp, cur))
{
+ int err = errno;
closedir_and_clear (cur->fts_dirp);
- __set_errno (ENOMEM);
+ __set_errno (err);
return NULL;
}
}
fts_lfree (register FTSENT *head)
{
register FTSENT *p;
+ int err = errno;
/* Free a linked list of structures. */
while ((p = head)) {
closedir (p->fts_dirp);
free(p);
}
+
+ __set_errno (err);
}
/*