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/cpp.c | |
parent | ec19c5697f3caf52e6be57049169e2eb048299e6 (diff) |
cpp: #pragma once support
Diffstat (limited to 'sys/src/cmd/cpp/cpp.c')
-rw-r--r-- | sys/src/cmd/cpp/cpp.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/sys/src/cmd/cpp/cpp.c b/sys/src/cmd/cpp/cpp.c index 2a49ea8bc..aed6ecb7c 100644 --- a/sys/src/cmd/cpp/cpp.c +++ b/sys/src/cmd/cpp/cpp.c @@ -85,6 +85,7 @@ control(Tokenrow *trp) { Nlist *np; Token *tp; + Dir *d; tp = trp->tp; if (tp->type!=NAME) { @@ -148,7 +149,17 @@ control(Tokenrow *trp) break; case KPRAGMA: - return; + tp += 1; + if (tp->type!=NAME || tp->len < 4 || memcmp(tp->t, "once", 4) != 0) + return; + if (nblocked >= NONCE) + error(FATAL, "#pragma once list max length exceeded"); + d = dirfstat(cursource->fd); + if (d == nil) + error(FATAL, "Out of memory from dirfstat"); + incblocked[nblocked++] = d->qid; + free(d); + break; case KIFDEF: case KIFNDEF: |