diff --git a/src/ca65/incpath.c b/src/ca65/incpath.c index 80db9ed63..2abd99f62 100644 --- a/src/ca65/incpath.c +++ b/src/ca65/incpath.c @@ -6,10 +6,10 @@ /* */ /* */ /* */ -/* (C) 2000 Ullrich von Bassewitz */ -/* Wacholderweg 14 */ -/* D-70597 Stuttgart */ -/* EMail: uz@musoftware.de */ +/* (C) 2000-2003 Ullrich von Bassewitz */ +/* Römerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -33,29 +33,21 @@ -#include -#include -#if defined(_MSC_VER) -/* Microsoft compiler */ -# include -#else -/* Anyone else */ -# include -#endif - -#include "../common/xmalloc.h" +/* common */ +#include "searchpath.h" +/* ca65 */ #include "incpath.h" /*****************************************************************************/ -/* Data */ +/* Data */ /*****************************************************************************/ -static char* IncludePath = 0; +#define INC_STD 0x0001U @@ -65,101 +57,10 @@ static char* IncludePath = 0; -static char* Add (char* Orig, const char* New) -/* Create a new path from Orig and New, delete Orig, return the result */ -{ - unsigned OrigLen, NewLen; - char* NewPath; - - /* Get the length of the original string */ - OrigLen = Orig? strlen (Orig) : 0; - - /* Get the length of the new path */ - NewLen = strlen (New); - - /* Check for a trailing path separator and remove it */ - if (NewLen > 0 && (New [NewLen-1] == '\\' || New [NewLen-1] == '/')) { - --NewLen; - } - - /* Allocate memory for the new string */ - NewPath = xmalloc (OrigLen + NewLen + 2); - - /* Copy the strings */ - memcpy (NewPath, Orig, OrigLen); - memcpy (NewPath+OrigLen, New, NewLen); - NewPath [OrigLen+NewLen+0] = ';'; - NewPath [OrigLen+NewLen+1] = '\0'; - - /* Delete the original path */ - xfree (Orig); - - /* Return the new path */ - return NewPath; -} - - - -static char* Find (const char* Path, const char* File) -/* Search for a file in a list of directories. If found, return the complete - * name including the path in a malloced data area, if not found, return 0. - */ -{ - const char* P; - int Max; - char PathName [FILENAME_MAX]; - - /* 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 */ - if (P == 0) { - P = ""; - } - - /* Start the search */ - while (*P) { - /* Copy the next path element into the buffer */ - int Count = 0; - while (*P != '\0' && *P != ';' && Count < Max) { - PathName [Count++] = *P++; - } - - /* Add a path separator and the filename */ - if (Count) { - PathName [Count++] = '/'; - } - strcpy (PathName + Count, File); - - /* Check if this file exists */ - if (access (PathName, 0) == 0) { - /* The file exists */ - return xstrdup (PathName); - } - - /* Skip a list separator if we have one */ - if (*P == ';') { - ++P; - } - } - - /* Not found */ - return 0; -} - - - void AddIncludePath (const char* NewPath) /* Add a new include path to the existing one */ { - /* Allow a NULL path */ - if (NewPath) { - IncludePath = Add (IncludePath, NewPath); - } + AddSearchPath (NewPath, INC_STD); } @@ -170,7 +71,7 @@ char* FindInclude (const char* Name) */ { /* Search in the include directories */ - return Find (IncludePath, Name); + return SearchFile (Name, INC_STD); } diff --git a/src/ca65/incpath.h b/src/ca65/incpath.h index 7b04e1bfe..a2b71e553 100644 --- a/src/ca65/incpath.h +++ b/src/ca65/incpath.h @@ -6,10 +6,10 @@ /* */ /* */ /* */ -/* (C) 2000 Ullrich von Bassewitz */ -/* Wacholderweg 14 */ -/* D-70597 Stuttgart */ -/* EMail: uz@musoftware.de */ +/* (C) 2000-2003 Ullrich von Bassewitz */ +/* Römerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ diff --git a/src/cc65/incpath.c b/src/cc65/incpath.c index 0d2110d6a..abac35c3a 100644 --- a/src/cc65/incpath.c +++ b/src/cc65/incpath.c @@ -33,142 +33,26 @@ -#include #include -#include -#if defined(_MSC_VER) -/* Microsoft compiler */ -# include -#else -/* Anyone else */ -# include -#endif /* common */ -#include "xmalloc.h" +#include "searchpath.h" /* cc65 */ #include "incpath.h" -/*****************************************************************************/ -/* Data */ -/*****************************************************************************/ - - - -static char* SysIncludePath = 0; -static char* UserIncludePath = 0; - - - /*****************************************************************************/ /* Code */ /*****************************************************************************/ -static char* Add (char* Orig, const char* New) -/* Create a new path from Orig and New, delete Orig, return the result */ -{ - unsigned OrigLen, NewLen; - char* NewPath; - - /* Get the length of the original string */ - OrigLen = Orig? strlen (Orig) : 0; - - /* Get the length of the new path */ - NewLen = strlen (New); - - /* Check for a trailing path separator and remove it */ - if (NewLen > 0 && (New [NewLen-1] == '\\' || New [NewLen-1] == '/')) { - --NewLen; - } - - /* Allocate memory for the new string */ - NewPath = (char*) xmalloc (OrigLen + NewLen + 2); - - /* Copy the strings */ - memcpy (NewPath, Orig, OrigLen); - memcpy (NewPath+OrigLen, New, NewLen); - NewPath [OrigLen+NewLen+0] = ';'; - NewPath [OrigLen+NewLen+1] = '\0'; - - /* Delete the original path */ - xfree (Orig); - - /* Return the new path */ - return NewPath; -} - - - -static char* Find (const char* Path, const char* File) -/* Search for a file in a list of directories. If found, return the complete - * name including the path in a malloced data area, if not found, return 0. - */ -{ - const char* P; - int Max; - char PathName [FILENAME_MAX]; - - /* 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 */ - if (P == 0) { - P = ""; - } - - /* Start the search */ - while (*P) { - /* Copy the next path element into the buffer */ - int Count = 0; - while (*P != '\0' && *P != ';' && Count < Max) { - PathName [Count++] = *P++; - } - - /* Add a path separator and the filename */ - if (Count) { - PathName [Count++] = '/'; - } - strcpy (PathName + Count, File); - - /* Check if this file exists */ - if (access (PathName, 0) == 0) { - /* The file exists */ - return xstrdup (PathName); - } - - /* Skip a list separator if we have one */ - if (*P == ';') { - ++P; - } - } - - /* Not found */ - return 0; -} - - - void AddIncludePath (const char* NewPath, unsigned Where) /* Add a new include path to the existing one */ { - /* Allow a NULL path */ - if (NewPath) { - if (Where & INC_SYS) { - SysIncludePath = Add (SysIncludePath, NewPath); - } - if (Where & INC_USER) { - UserIncludePath = Add (UserIncludePath, NewPath); - } - } + AddSearchPath (NewPath, Where); } @@ -178,15 +62,7 @@ char* FindInclude (const char* Name, unsigned Where) * the complete path, if found, return 0 otherwise. */ { - if (Where & INC_SYS) { - /* Search in the system include directories */ - return Find (SysIncludePath, Name); - } - if (Where & INC_USER) { - /* Search in the user include directories */ - return Find (UserIncludePath, Name); - } - return 0; + return SearchFile (Name, Where); }