# HG changeset patch # User David A. Holland # Date 1370973007 14400 # Node ID 2b0b61fd1a362c4e0d6bcf15c1885b20890dc6cf # Parent 36dd4701e0bab9ff320623d20c6582c96eca3815 Fix handling of relative includes. diff -r 36dd4701e0ba -r 2b0b61fd1a36 CHANGES --- a/CHANGES Tue Jun 11 13:11:01 2013 -0400 +++ b/CHANGES Tue Jun 11 13:50:07 2013 -0400 @@ -8,6 +8,7 @@ - clean out usage of sys/cdefs.h macros and don't use the implementation namespace - make -Wcomment work again + - fix handling of relative includes - provide a man page release 0.1 (20130610) diff -r 36dd4701e0ba -r 2b0b61fd1a36 files.c --- a/files.c Tue Jun 11 13:11:01 2013 -0400 +++ b/files.c Tue Jun 11 13:50:07 2013 -0400 @@ -290,12 +290,16 @@ static char * -mkfilename(const char *dir, const char *file) +mkfilename(struct place *place, const char *dir, const char *file) { size_t dlen, flen, rlen; char *ret; bool needslash = false; + if (dir == NULL) { + dir = place_getparsedir(place); + } + dlen = strlen(dir); flen = strlen(file); if (dlen > 0 && dir[dlen-1] != '/') { @@ -352,7 +356,7 @@ num = incdirarray_num(path); for (i=0; iname, name); + file = mkfilename(place, id->name, name); fd = file_tryopen(file); if (fd >= 0) { pf = place_addfile(place, file, id->issystem); diff -r 36dd4701e0ba -r 2b0b61fd1a36 main.c --- a/main.c Tue Jun 11 13:11:01 2013 -0400 +++ b/main.c Tue Jun 11 13:50:07 2013 -0400 @@ -391,7 +391,7 @@ dir = stringarray_get(&incpath_quote, i); files_addquotepath(dir, false); } - files_addquotepath(".", false); + files_addquotepath(NULL, false); num = stringarray_num(&incpath_user); for (i=0; i #include #include +#include #include "utils.h" #include "array.h" @@ -38,6 +39,7 @@ struct placefile { struct place includedfrom; + char *dir; char *name; int depth; bool fromsystemdir; @@ -57,11 +59,19 @@ bool fromsystemdir) { struct placefile *pf; + const char *s; + size_t len; pf = domalloc(sizeof(*pf)); pf->includedfrom = *from; + + s = strrchr(name, '/'); + len = (s == NULL) ? 0 : s - name; + pf->dir = dostrndup(name, len); + pf->name = dostrdup(name); pf->fromsystemdir = fromsystemdir; + if (from->file != NULL) { pf->depth = from->file->depth + 1; } else { @@ -80,6 +90,15 @@ DESTROYALL_ARRAY(placefile, ); +const char * +place_getparsedir(const struct place *place) +{ + if (place->file == NULL) { + return "."; + } + return place->file->dir; +} + const struct placefile * place_addfile(const struct place *place, const char *file, bool issystem) { diff -r 36dd4701e0ba -r 2b0b61fd1a36 place.h --- a/place.h Tue Jun 11 13:11:01 2013 -0400 +++ b/place.h Tue Jun 11 13:50:07 2013 -0400 @@ -50,5 +50,7 @@ void place_setcommandline(struct place *p, unsigned word, unsigned column); void place_setfilestart(struct place *p, const struct placefile *pf); +const char *place_getparsedir(const struct place *incplace); + const struct placefile *place_addfile(const struct place *incplace, const char *name, bool fromsystemdir);