diff options
author | Marcus Brinkmann <marcus@gnu.org> | 2001-01-07 17:04:49 +0000 |
---|---|---|
committer | Marcus Brinkmann <marcus@gnu.org> | 2001-01-07 17:04:49 +0000 |
commit | 08acb4201d53562fcbcece79de54b7314a7f8f9d (patch) | |
tree | 83504717bc9cabfb687ccf46e3a1cef2fd35c078 /ftpfs/dir.c | |
parent | 58ef6ed22655adf4a797bedb85da862f872b10b8 (diff) |
2000-12-21 Marcus Brinkmann <marcus@gnu.org>
* dir.c (ftpfs_dir_create): New macro INIT_HTABLE_LEN to
specify initialize htable_len. New variable htable,
allocate memory to it with calloc before acquiring a node
reference. If this fails, return any allocated memory and
return with ENOMEM. Set new->htable_len to INIT_HTABLE_LEN
and new->htable to htable. Don't bzero htable anymore, as
we use calloc.
Diffstat (limited to 'ftpfs/dir.c')
-rw-r--r-- | ftpfs/dir.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/ftpfs/dir.c b/ftpfs/dir.c index f083848a..462567f6 100644 --- a/ftpfs/dir.c +++ b/ftpfs/dir.c @@ -806,6 +806,9 @@ ftpfs_dir_null_lookup (struct ftpfs_dir *dir, struct node **node) return err; } +/* Size of initial htable for a new directory. */ +#define INIT_HTABLE_LEN 5 + /* Return in DIR a new ftpfs directory, in the filesystem FS, with node NODE and remote path RMT_PATH. RMT_PATH is *not copied*, so it shouldn't ever change while this directory is active. */ @@ -814,9 +817,17 @@ ftpfs_dir_create (struct ftpfs *fs, struct node *node, const char *rmt_path, struct ftpfs_dir **dir) { struct ftpfs_dir *new = malloc (sizeof (struct ftpfs_dir)); + struct ftpfs_dir_entry **htable + = calloc (INIT_HTABLE_LEN * sizeof (struct ftpfs_dir_entry *)); - if (! new) - return ENOMEM; + if (!new || !htable) + { + if (new) + free (new); + if (htable) + free (htable); + return ENOMEM; + } /* Hold a reference to the new dir's node. */ spin_lock (&netfs_node_refcnt_lock); @@ -825,9 +836,8 @@ ftpfs_dir_create (struct ftpfs *fs, struct node *node, const char *rmt_path, new->num_entries = 0; new->num_live_entries = 0; - new->htable_len = 5; - new->htable = malloc (new->htable_len * sizeof (struct ftpfs_dir_entry *)); - bzero (new->htable, sizeof *new->htable * new->htable_len); + new->htable_len = INIT_HTABLE_LEN; + new->htable = htable; new->ordered = 0; new->rmt_path = rmt_path; new->fs = fs; |