summaryrefslogtreecommitdiffstats
path: root/fs/ramfs.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-05 18:01:50 +0200
committerSascha Hauer <sha@octopus.labnet.pengutronix.de>2007-07-05 18:01:50 +0200
commit5b4110a39c1810e16bffe647c86709bd3b28c7fc (patch)
tree4af18f558c7e58274edeaf87eecf2a655726cb11 /fs/ramfs.c
parent84ae3410498fa3a612c6dde4a93b7481245d5f4b (diff)
downloadbarebox-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.c16
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;