From b9050b452a7ec7ca27be8bc55e00594e279e3fa4 Mon Sep 17 00:00:00 2001 From: Zeex Date: Mon, 6 Jan 2014 22:23:18 +0700 Subject: [PATCH] Add '/' as a portable path separator for #include This fixes a bug where if you use '/' in an #include directive on Windows the _inc_XXX symbol will contain not only the file name but also its path as the compiler didn't count '/' as a path separator. --- source/amx/osdefs.h | 3 +++ source/compiler/sc2.c | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/source/amx/osdefs.h b/source/amx/osdefs.h index 29804ab..2ee7957 100644 --- a/source/amx/osdefs.h +++ b/source/amx/osdefs.h @@ -66,6 +66,9 @@ #define DIRSEP_CHAR '/' /* directory separator character */ #endif +/* system-independent directory separator */ +#define DIRSEP_CHAR_SI '/' + /* _MAX_PATH is sometimes called differently and it may be in limits.h or * stdlib.h instead of stdio.h. */ diff --git a/source/compiler/sc2.c b/source/compiler/sc2.c index ee61984..fc3aa67 100644 --- a/source/compiler/sc2.c +++ b/source/compiler/sc2.c @@ -183,7 +183,8 @@ SC_FUNC int plungefile(char *name,int try_currentpath,int try_includepaths) * there is a (relative) path for the current file */ char *ptr; - if ((ptr=strrchr(inpfname,DIRSEP_CHAR))!=0) { + if ((ptr=strrchr(inpfname,DIRSEP_CHAR))!=0 | + (ptr=strrchr(inpfname,DIRSEP_CHAR_SI))!=0) { int len=(int)(ptr-inpfname)+1; if (len+strlen(name)<_MAX_PATH) { char path[_MAX_PATH]; @@ -268,6 +269,8 @@ static void doinclude(int silent) strcpy(symname,"_inc_"); if ((ptr=strrchr(name,DIRSEP_CHAR))!=NULL) strlcat(symname,ptr+1,sizeof symname); + else if ((ptr=strrchr(name,DIRSEP_CHAR_SI))!=NULL) + strlcat(symname,ptr+1,sizeof symname); else strlcat(symname,name,sizeof symname); if (find_symbol(&glbtab,symname,fcurrent,-1,NULL)==NULL) {