diff options
author | Jacob Moody <moody@posixcafe.org> | 2023-03-21 21:24:16 +0000 |
---|---|---|
committer | Jacob Moody <moody@posixcafe.org> | 2023-03-21 21:24:16 +0000 |
commit | d79edf98b8d3dd8c1cbf9ad1be7728e13ed7a364 (patch) | |
tree | b56605292a50c28e7e8c2e1e83b91f2f7a5a259b /sys/src/cmd/cpp/include.c | |
parent | ec19c5697f3caf52e6be57049169e2eb048299e6 (diff) |
cpp: #pragma once support
Diffstat (limited to 'sys/src/cmd/cpp/include.c')
-rw-r--r-- | sys/src/cmd/cpp/include.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/sys/src/cmd/cpp/include.c b/sys/src/cmd/cpp/include.c index a4e716482..347916981 100644 --- a/sys/src/cmd/cpp/include.c +++ b/sys/src/cmd/cpp/include.c @@ -6,12 +6,16 @@ Includelist includelist[NINCLUDE]; char *objname; +Qid incblocked[NONCE]; +int nblocked = 0; + void doinclude(Tokenrow *trp) { char fname[256], iname[256], *p; Includelist *ip; int angled, len, fd, i; + Dir *d; trp->tp += 1; if (trp->tp>=trp->lp) @@ -87,6 +91,15 @@ doinclude(Tokenrow *trp) write(1,"\n",1); } if (fd >= 0) { + d = dirfstat(fd); + if (d == nil) + error(FATAL, "Out of memory from dirfstat"); + for (i=0; i<nblocked; i++) + if (incblocked[i].path == d->qid.path && incblocked[i].type == d->qid.type) { + free(d); + return; + } + free(d); if (++incdepth > 20) error(FATAL, "#include too deeply nested"); setsource((char*)newstring((uchar*)iname, strlen(iname), 0), fd, NULL); |