From 658b765bfe534f7aed0d96aa11a0adebe396838f Mon Sep 17 00:00:00 2001
From: "ol.sc" 
Date: Tue, 23 Oct 2012 19:24:27 +0000
Subject: [PATCH] Replaced static array with realloc'ed memory block - like
 done in enumdevdir.c.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5870 b7a2c559-68d2-44c3-8de9-860c34a00d81
---
 samples/multidemo.c | 29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)
diff --git a/samples/multidemo.c b/samples/multidemo.c
index 20f82b895..5e505083e 100644
--- a/samples/multidemo.c
+++ b/samples/multidemo.c
@@ -12,6 +12,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 
@@ -42,10 +43,6 @@ struct {
  */
 #define MAX_EM_OVERLAY 3
 
-/* Search for up to 10 extended memory drivers.
- */
-#define MAX_EM_DRIVER 10
-
 
 
 /* Functions resident in an overlay can call back functions resident in the
@@ -101,9 +98,9 @@ void foobar (void)
 
 unsigned char loademdriver (void)
 {
-    static char emd[MAX_EM_DRIVER][FILENAME_MAX];
     DIR *dir;
     struct dirent *ent;
+    char *emd = NULL;
     unsigned char max = 0;
     unsigned char num;
 
@@ -128,22 +125,26 @@ unsigned char loademdriver (void)
         }
 
         printf ("Dbg: Memorizing file %s\n", ent->d_name);
-        strcpy (emd[max], ent->d_name);
-        if (++max == MAX_EM_DRIVER) {
-            break;
-        }
+        emd = realloc (emd, FILENAME_MAX * (max + 1));
+        strcpy (emd + FILENAME_MAX * max++, ent->d_name);
     }
     closedir (dir);
 
     for (num = 0; num < max; ++num) {
-        printf ("Dbg: Trying emdriver %s\n", emd[num]);
-        if (em_load_driver (emd[num]) == EM_ERR_OK) {
-            printf ("Dbg: Loaded emdriver %s\n", emd[num]);
+        char *drv;
+
+        drv = emd + FILENAME_MAX * num;
+        printf ("Dbg: Trying emdriver %s\n", drv);
+        if (em_load_driver (drv) == EM_ERR_OK) {
+            printf ("Dbg: Loaded emdriver %s\n", drv);
+            free (emd);
             return 1;
         }
- 
-        printf ("Dbg: Emdriver %s failed\n", emd[num]);
+
+        printf ("Dbg: Emdriver %s failed\n", drv);
     }
+
+    free (emd);
     return 0;
 }
 
-- 
2.39.5