diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2007-07-05 18:01:50 +0200 |
---|---|---|
committer | Sascha Hauer <sha@octopus.labnet.pengutronix.de> | 2007-07-05 18:01:50 +0200 |
commit | 5b4110a39c1810e16bffe647c86709bd3b28c7fc (patch) | |
tree | 4af18f558c7e58274edeaf87eecf2a655726cb11 /fs/ramfs.c | |
parent | 84ae3410498fa3a612c6dde4a93b7481245d5f4b (diff) | |
download | barebox-5b4110a39c1810e16bffe647c86709bd3b28c7fc.tar.gz barebox-5b4110a39c1810e16bffe647c86709bd3b28c7fc.tar.xz |
svn_rev_396
fix truncate (again). This still looks ugly
Diffstat (limited to 'fs/ramfs.c')
-rw-r--r-- | fs/ramfs.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/fs/ramfs.c b/fs/ramfs.c index 65d6a047cb..5047d7c399 100644 --- a/fs/ramfs.c +++ b/fs/ramfs.c @@ -112,8 +112,14 @@ static int chunks = 0; struct ramfs_chunk *ramfs_get_chunk(void) { struct ramfs_chunk *data = malloc(sizeof(struct ramfs_chunk)); + if (!data) + return NULL; // printf("get chunk\n"); data->data = malloc(CHUNK_SIZE); + if (!data->data) { + free(data); + return NULL; + } data->next = NULL; chunks++; // printf("chunks: %d\n", chunks); @@ -398,6 +404,8 @@ int ramfs_truncate(struct device_d *dev, FILE *f, ulong size) if (newchunks > oldchunks) { if (!data) { node->data = ramfs_get_chunk(); + if (!node->data) + return -ENOMEM; data = node->data; } @@ -409,7 +417,9 @@ int ramfs_truncate(struct device_d *dev, FILE *f, ulong size) while (newchunks--) { data->next = ramfs_get_chunk(); - data = data->next; + if (!data->next) + return -ENOMEM; + data = data->next; } } node->size = size; @@ -431,9 +441,7 @@ struct dir* ramfs_opendir(struct device_d *dev, const char *pathname) if (node->mode != S_IFDIR) return NULL; - dir = malloc(sizeof(struct dir)); - if (!dir) - return NULL; + dir = xmalloc(sizeof(struct dir)); dir->priv = node->child; |