summaryrefslogtreecommitdiffstats
path: root/disk-utils/mkfs.cramfs.c
diff options
context:
space:
mode:
authorKarel Zak2007-02-27 16:31:21 +0100
committerKarel Zak2007-02-27 16:31:21 +0100
commit3e52b13e91a8d4935af17974a59843bb7ea854b9 (patch)
treeb1df8566fd97180785a278d98539ab61eaf6af59 /disk-utils/mkfs.cramfs.c
parenttests: add mkfs.cramfs tests (diff)
downloadkernel-qcow2-util-linux-3e52b13e91a8d4935af17974a59843bb7ea854b9.tar.gz
kernel-qcow2-util-linux-3e52b13e91a8d4935af17974a59843bb7ea854b9.tar.xz
kernel-qcow2-util-linux-3e52b13e91a8d4935af17974a59843bb7ea854b9.zip
mkfs.cramfs: remove hardcoded limit for directories
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'disk-utils/mkfs.cramfs.c')
-rw-r--r--disk-utils/mkfs.cramfs.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/disk-utils/mkfs.cramfs.c b/disk-utils/mkfs.cramfs.c
index 328912857..ac2a308af 100644
--- a/disk-utils/mkfs.cramfs.c
+++ b/disk-utils/mkfs.cramfs.c
@@ -471,11 +471,13 @@ static void set_data_offset(struct entry *entry, char *base, unsigned long offse
* entries, using a stack to remember the directories
* we've seen.
*/
-#define MAXENTRIES (100)
static unsigned int write_directory_structure(struct entry *entry, char *base, unsigned int offset)
{
int stack_entries = 0;
- struct entry *entry_stack[MAXENTRIES];
+ int stack_size = 64;
+ struct entry **entry_stack;
+
+ entry_stack = xmalloc(stack_size * sizeof(struct entry *));
for (;;) {
int dir_start = stack_entries;
@@ -508,13 +510,13 @@ static unsigned int write_directory_structure(struct entry *entry, char *base, u
if (verbose)
printf(" %s\n", entry->name);
if (entry->child) {
- if (stack_entries >= MAXENTRIES) {
- fprintf(stderr,
- _("Exceeded MAXENTRIES. Raise"
- " this value in mkcramfs.c "
- "and recompile. Exiting.\n")
- );
- exit(8);
+ if (stack_entries >= stack_size) {
+ stack_size *= 2;
+ entry_stack = realloc(entry_stack, stack_size * sizeof(struct entry *));
+ if (!entry_stack) {
+ perror(NULL);
+ exit(8); /* out of memory */
+ }
}
entry_stack[stack_entries] = entry;
stack_entries++;
@@ -551,6 +553,7 @@ static unsigned int write_directory_structure(struct entry *entry, char *base, u
printf("'%s':\n", entry->name);
entry = entry->child;
}
+ free(entry_stack);
return offset;
}