]> git.sur5r.net Git - cc65/commitdiff
Replace the fixed buffer in the Find() routine by a dynamically allocated
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 22 Aug 2006 20:27:59 +0000 (20:27 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 22 Aug 2006 20:27:59 +0000 (20:27 +0000)
string using a StrBuf. This works around problems with Watcom C where
FILENAME_MAX was just 80.

git-svn-id: svn://svn.cc65.org/cc65/trunk@3765 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/common/searchpath.c

index 7ae0a96efa1024af6064eff7be223a85dd25895c..e4c4f7223cb9c6414bdcb1a57563ace2edec5354 100644 (file)
@@ -33,7 +33,6 @@
 
 
 
-#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #if defined(_MSC_VER)
@@ -46,6 +45,7 @@
 
 /* common */
 #include "searchpath.h"
+#include "strbuf.h"
 #include "xmalloc.h"
 
 
@@ -107,14 +107,9 @@ static char* Find (const char* Path, const char* File)
  */
 {
     const char* P;
-    int Max;
-    char PathName [FILENAME_MAX];
+    StrBuf PathName = AUTO_STRBUF_INITIALIZER;
 
     /* Initialize variables */
-    Max = sizeof (PathName) - strlen (File) - 2;
-    if (Max < 0) {
-       return 0;
-    }
     P = Path;
 
     /* Handle a NULL pointer as replacement for an empty string */
@@ -124,22 +119,27 @@ static char* Find (const char* Path, const char* File)
 
     /* Start the search */
     while (*P) {
+       /* Clear the string buffer */
+       SB_Clear (&PathName);
+
         /* Copy the next path element into the buffer */
-       int Count = 0;
-       while (*P != '\0' && *P != ';' && Count < Max) {
-           PathName [Count++] = *P++;
+       while (*P != '\0' && *P != ';') {
+           SB_AppendChar (&PathName, *P++);
        }
 
        /* Add a path separator and the filename */
-       if (Count) {
-           PathName [Count++] = '/';
+               if (SB_NotEmpty (&PathName)) {
+           SB_AppendChar (&PathName, '/');
        }
-       strcpy (PathName + Count, File);
+       SB_AppendStr (&PathName, File);
+       SB_Terminate (&PathName);
 
        /* Check if this file exists */
-       if (access (PathName, 0) == 0) {
-           /* The file exists */
-           return xstrdup (PathName);
+               if (access (SB_GetBuf (&PathName), 0) == 0) {
+           /* The file exists, return its name */
+           char* Name = xstrdup (SB_GetBuf (&PathName));
+           DoneStrBuf (&PathName);
+           return Name;
        }
 
        /* Skip a list separator if we have one */
@@ -149,6 +149,7 @@ static char* Find (const char* Path, const char* File)
     }
 
     /* Not found */
+    DoneStrBuf (&PathName);
     return 0;
 }