diff --git a/include/asm/fstack.h b/include/asm/fstack.h index 23dc30a2..0c0c74c2 100644 --- a/include/asm/fstack.h +++ b/include/asm/fstack.h @@ -42,7 +42,7 @@ void fstk_Dump(void); void fstk_AddIncludePath(char *s); uint32_t fstk_RunMacro(char *s); void fstk_RunRept(uint32_t count); -FILE *fstk_FindFile(char *fname); +FILE *fstk_FindFile(char *fname, char **incPathUsed); int32_t fstk_GetLine(void); #endif /* RGBDS_ASM_FSTACK_H */ diff --git a/src/asm/fstack.c b/src/asm/fstack.c index 638644fe..2d5d4cc2 100644 --- a/src/asm/fstack.c +++ b/src/asm/fstack.c @@ -234,7 +234,7 @@ void fstk_AddIncludePath(char *s) fatalerror("Include path too long '%s'", s); } -FILE *fstk_FindFile(char *fname) +FILE *fstk_FindFile(char *fname, char **incPathUsed) { char path[_MAX_PATH]; int32_t i; @@ -275,6 +275,8 @@ FILE *fstk_FindFile(char *fname) fprintf(dependfile, "%s: %s\n", tzObjectname, path); } + if (incPathUsed) + *incPathUsed = IncludePaths[i]; return f; } } @@ -288,7 +290,8 @@ FILE *fstk_FindFile(char *fname) */ void fstk_RunInclude(char *tzFileName) { - FILE *f = fstk_FindFile(tzFileName); + char *incPathUsed = ""; + FILE *f = fstk_FindFile(tzFileName, &incPathUsed); if (f == NULL) err(1, "Unable to open included file '%s'", tzFileName); @@ -296,7 +299,8 @@ void fstk_RunInclude(char *tzFileName) pushcontext(); nLineNo = 1; nCurrentStatus = STAT_isInclude; - strcpy(tzCurrentFileName, tzFileName); + snprintf(tzCurrentFileName, sizeof(tzCurrentFileName), "%s%s", + incPathUsed, tzFileName); pCurrentFile = f; CurrentFlexHandle = yy_create_buffer(pCurrentFile); yy_switch_to_buffer(CurrentFlexHandle); diff --git a/src/asm/output.c b/src/asm/output.c index 0059fe60..ed0ae51a 100644 --- a/src/asm/output.c +++ b/src/asm/output.c @@ -902,7 +902,7 @@ void out_BinaryFile(char *s) { FILE *f; - f = fstk_FindFile(s); + f = fstk_FindFile(s, NULL); if (f == NULL) err(1, "Unable to open incbin file '%s'", s); @@ -938,7 +938,7 @@ void out_BinaryFileSlice(char *s, int32_t start_pos, int32_t length) if (length < 0) fatalerror("Number of bytes to read must be greater than zero"); - f = fstk_FindFile(s); + f = fstk_FindFile(s, NULL); if (f == NULL) err(1, "Unable to open included file '%s'", s);