aboutsummaryrefslogtreecommitdiffstats
path: root/code/tools/lcc/cpp/include.c
diff options
context:
space:
mode:
Diffstat (limited to 'code/tools/lcc/cpp/include.c')
-rw-r--r--code/tools/lcc/cpp/include.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/code/tools/lcc/cpp/include.c b/code/tools/lcc/cpp/include.c
index b3757e8..71bd90c 100644
--- a/code/tools/lcc/cpp/include.c
+++ b/code/tools/lcc/cpp/include.c
@@ -1,3 +1,4 @@
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cpp.h"
@@ -6,6 +7,29 @@ Includelist includelist[NINCLUDE];
extern char *objname;
+void appendDirToIncludeList( char *dir )
+{
+ int i;
+
+ //avoid adding it more than once
+ for (i=NINCLUDE-2; i>=0; i--) {
+ if (includelist[i].file &&
+ !strcmp (includelist[i].file, dir)) {
+ return;
+ }
+ }
+
+ for (i=NINCLUDE-2; i>=0; i--) {
+ if (includelist[i].file==NULL) {
+ includelist[i].always = 1;
+ includelist[i].file = dir;
+ break;
+ }
+ }
+ if (i<0)
+ error(FATAL, "Too many -I directives");
+}
+
void
doinclude(Tokenrow *trp)
{
@@ -44,6 +68,9 @@ doinclude(Tokenrow *trp)
if (trp->tp < trp->lp || len==0)
goto syntax;
fname[len] = '\0';
+
+ appendDirToIncludeList( basepath( fname ) );
+
if (fname[0]=='/') {
fd = open(fname, 0);
strcpy(iname, fname);