summaryrefslogtreecommitdiff
path: root/sys/src/libdtracy/chan.c
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2018-12-13 10:42:49 +0000
committeraiju <devnull@localhost>2018-12-13 10:42:49 +0000
commitc7304ea03caf68cf035d14f50f6e24e0c16ccdfe (patch)
treef4b5e8047078c41caa0d98cc0ea3d5012c4d17f9 /sys/src/libdtracy/chan.c
parentdae5a44111dfb21a714824a5cec2abee4f9f9080 (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.c50
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;
}