cpp: search source file directory first for quoted #include (thanks Ori_B)

foo.c includes bar/bar.h, which includes "baz.h"; it wants bar/baz.h
meanwhile, it also includes meh/quux.h, which includes "baz.h"; it wants meh/baz.h
This commit is contained in:
cinap_lenrek 2015-07-13 00:54:56 +02:00
parent a5efa0e252
commit cd9da74cbc

View file

@ -47,27 +47,39 @@ doinclude(Tokenrow *trp)
if (fname[0]=='/') { if (fname[0]=='/') {
fd = open(fname, 0); fd = open(fname, 0);
strcpy(iname, fname); strcpy(iname, fname);
} else for (fd=-1,i=NINCLUDE-1; i>=0; i--) { } else {
ip = &includelist[i]; fd = -1;
if (ip->file==NULL || ip->deleted || (angled && ip->always==0)) if (!angled) {
continue; strcpy(iname, cursource->filename);
if (strlen(fname)+strlen(ip->file)+2 > sizeof(iname)) p = strrchr(iname, '/');
continue; if (p != NULL) {
strcpy(iname, ip->file); *p = '\0';
strcat(iname, "/"); strcat(iname, "/");
strcat(iname, fname); strcat(iname, fname);
if ((fd = open(iname, 0)) >= 0) fd = open(iname, 0);
break; }
} }
if(fd < 0) { for (i=NINCLUDE-1; fd<0 && i>=0; i--) {
strcpy(iname, cursource->filename); ip = &includelist[i];
p = strrchr(iname, '/'); if (ip->file==NULL || ip->deleted || (angled && ip->always==0))
if(p != NULL) { continue;
*p = '\0'; if (strlen(fname)+strlen(ip->file)+2 > sizeof(iname))
continue;
strcpy(iname, ip->file);
strcat(iname, "/"); strcat(iname, "/");
strcat(iname, fname); strcat(iname, fname);
fd = open(iname, 0); fd = open(iname, 0);
} }
if (fd<0 && angled) {
strcpy(iname, cursource->filename);
p = strrchr(iname, '/');
if(p != NULL) {
*p = '\0';
strcat(iname, "/");
strcat(iname, fname);
fd = open(iname, 0);
}
}
} }
if ( Mflag>1 || !angled&&Mflag==1 ) { if ( Mflag>1 || !angled&&Mflag==1 ) {
write(1,objname,strlen(objname)); write(1,objname,strlen(objname));