diff options
author | aiju <devnull@localhost> | 2018-12-13 10:42:49 +0000 |
---|---|---|
committer | aiju <devnull@localhost> | 2018-12-13 10:42:49 +0000 |
commit | c7304ea03caf68cf035d14f50f6e24e0c16ccdfe (patch) | |
tree | f4b5e8047078c41caa0d98cc0ea3d5012c4d17f9 /sys/src/libdtracy/chan.c | |
parent | dae5a44111dfb21a714824a5cec2abee4f9f9080 (diff) |
dtracy: get rid of DTName struct, support more than three parts in a probe name, wildcard matching
Diffstat (limited to 'sys/src/libdtracy/chan.c')
-rw-r--r-- | sys/src/libdtracy/chan.c | 50 |
1 files changed, 8 insertions, 42 deletions
diff --git a/sys/src/libdtracy/chan.c b/sys/src/libdtracy/chan.c index c29f24eb4..b926c965e 100644 --- a/sys/src/libdtracy/chan.c +++ b/sys/src/libdtracy/chan.c @@ -81,7 +81,7 @@ dtcfree(DTChan *ch) } int -dtcaddgr(DTChan *c, DTName name, DTActGr *gr) +dtcaddgr(DTChan *c, char *name, DTActGr *gr) { DTProbe **l, *p; DTEnab *ep; @@ -92,6 +92,11 @@ dtcaddgr(DTChan *c, DTName name, DTActGr *gr) gr->chan = c; nl = dtpmatch(name, &l); + if(nl == 0){ + dtfree(l); + werrstr("no match for %s", name); + return -1; + } n = 0; for(i = 0; i < nl; i++){ p = l[i]; @@ -118,53 +123,14 @@ dtcaddgr(DTChan *c, DTName name, DTActGr *gr) return n; } -static int -dtnamesplit(char *s, DTName *rp) -{ - char *p; - - p = strchr(s, ':'); - if(p == nil) return -1; - rp->provider = dtmalloc(p - s + 1); - memcpy(rp->provider, s, p - s); - s = p + 1; - p = strchr(s, ':'); - if(p == nil){ - free(rp->provider); - rp->provider = nil; - return -1; - } - rp->function = dtmalloc(p - s + 1); - memcpy(rp->function, s, p - s); - s = p + 1; - if(strchr(s, ':') != nil){ - free(rp->provider); - rp->provider = nil; - free(rp->function); - rp->function = nil; - return -1; - } - rp->name = dtstrdup(s); - return 0; -} - int dtcaddcl(DTChan *c, DTClause *cl) { - DTName n; int i, rc; rc = 0; - for(i = 0; i < cl->nprob; i++){ - if(dtnamesplit(cl->probs[i], &n) < 0){ - werrstr("invalid probe name '%s'", cl->probs[i]); - return -1; - } - rc += dtcaddgr(c, n, cl->gr); - dtfree(n.provider); - dtfree(n.function); - dtfree(n.name); - } + for(i = 0; i < cl->nprob; i++) + rc += dtcaddgr(c, cl->probs[i], cl->gr); return rc; } |