08be59b
--- util-linux-2.13-pre5/disk-utils/mkfs.cramfs.c.maxentries	2005-10-20 23:46:19.000000000 +0200
08be59b
+++ util-linux-2.13-pre5/disk-utils/mkfs.cramfs.c	2005-10-20 23:54:07.000000000 +0200
08be59b
@@ -471,11 +471,13 @@
08be59b
  * entries, using a stack to remember the directories
08be59b
  * we've seen.
08be59b
  */
08be59b
-#define MAXENTRIES (100)
08be59b
 static unsigned int write_directory_structure(struct entry *entry, char *base, unsigned int offset)
08be59b
 {
08be59b
 	int stack_entries = 0;
08be59b
-	struct entry *entry_stack[MAXENTRIES];
08be59b
+	int stack_size = 64;
08be59b
+	struct entry **entry_stack;
08be59b
+
08be59b
+	entry_stack = xmalloc(stack_size * sizeof(struct entry *));
08be59b
 
08be59b
 	for (;;) {
08be59b
 		int dir_start = stack_entries;
08be59b
@@ -508,13 +510,13 @@
08be59b
 			if (verbose)
08be59b
 				printf("  %s\n", entry->name);
08be59b
 			if (entry->child) {
08be59b
-				if (stack_entries >= MAXENTRIES) {
08be59b
-					fprintf(stderr,
08be59b
-						_("Exceeded MAXENTRIES.  Raise"
08be59b
-						  " this value in mkcramfs.c "
08be59b
-						  "and recompile.  Exiting.\n")
08be59b
-						);
08be59b
-					exit(8);
08be59b
+				if (stack_entries >= stack_size) {
08be59b
+					stack_size *= 2;
08be59b
+					entry_stack = realloc(entry_stack, stack_size * sizeof(struct entry *));
08be59b
+					if (!entry_stack) {
08be59b
+						perror(NULL);
08be59b
+						exit(8);        /* out of memory */
08be59b
+					}
08be59b
 				}
08be59b
 				entry_stack[stack_entries] = entry;
08be59b
 				stack_entries++;
08be59b
@@ -551,6 +553,7 @@
08be59b
 			printf("'%s':\n", entry->name);
08be59b
 		entry = entry->child;
08be59b
 	}
08be59b
+	free(entry_stack);
08be59b
 	return offset;
08be59b
 }
08be59b