aboutsummaryrefslogtreecommitdiffstats
path: root/builtin.c
diff options
context:
space:
mode:
authorAndrew J. Schorr <aschorr@telemetry-investments.com>2019-09-10 09:43:04 -0400
committerAndrew J. Schorr <aschorr@telemetry-investments.com>2019-09-10 09:43:04 -0400
commit7c3ad2bf3d4c5cac82146b3359134137bc6d83ff (patch)
tree7831287ee49e8e9ee12b22887c409fd3620fc391 /builtin.c
parentabc7fc68f8ce227db5a1ce881a8f065577c764dd (diff)
downloadegawk-7c3ad2bf3d4c5cac82146b3359134137bc6d83ff.tar.gz
egawk-7c3ad2bf3d4c5cac82146b3359134137bc6d83ff.tar.bz2
egawk-7c3ad2bf3d4c5cac82146b3359134137bc6d83ff.zip
Update the typeof(PROCINFO) hack to return memory highwater and active counts.
Diffstat (limited to 'builtin.c')
-rw-r--r--builtin.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/builtin.c b/builtin.c
index 46943909..0bd94bf9 100644
--- a/builtin.c
+++ b/builtin.c
@@ -4055,10 +4055,35 @@ do_typeof(int nargs)
int i;
for (i = 0; i < BLOCK_MAX; i++) {
char *p;
- size_t l = 6 + strlen(nextfree[i].name);
- emalloc(p, char *, l+1, "do_typeof");
- sprintf(p, "count_%s", nextfree[i].name);
- assoc_set(dbg, make_str_node(p, l, ALREADY_MALLOCED), make_number((AWKNUM) (nextfree[i].cnt)));
+ size_t nl = strlen(nextfree[i].name);
+ /*
+ * save values before we create new
+ * array elements so that we have a
+ * snapshot at a consistent moment in
+ * time
+ */
+ long hw = nextfree[i].highwater;
+ long active;
+#ifdef MEMDEBUG
+ active = nextfree[i].active;
+#else
+ active = hw;
+ {
+ struct block_item *ip;
+ for (ip = nextfree[i].freep; ip; ip = ip->freep)
+ active--;
+ }
+#endif
+
+#define SETVAL(X, V) { \
+ size_t l = nl + sizeof(#X); \
+ emalloc(p, char *, l+1, "do_typeof"); \
+ sprintf(p, "%s_" #X, nextfree[i].name); \
+ assoc_set(dbg, make_str_node(p, l, ALREADY_MALLOCED), make_number((AWKNUM) (V))); \
+}
+ SETVAL(highwater, hw)
+ SETVAL(active, active)
+#undef SETVAL
}
}
}