diff --git a/src/frontend/inpc_probe.c b/src/frontend/inpc_probe.c index 5642420b9..5004e1452 100644 --- a/src/frontend/inpc_probe.c +++ b/src/frontend/inpc_probe.c @@ -1376,13 +1376,21 @@ static int setallvsources(struct card *tmpcard, NGHASHPTR instances, char *instn } char* begstr = copy_substring(tmpcard->line, instline); char* strnode1 = gettok(&instline); - char* newnode = tprintf("probe_int_%s_%s_%d", strnode1, instname, nodenum); + + /* node name becomes part of a new v-source name, don't allow / in node name (aka /VT). + Replace by _ (_VT). + Otherwise the B source function parser fails with i() not found. */ + char* strnode1name = copy(strnode1); + if (strnode1name[0] == '/') + strnode1name[0] = '_'; + char* newnode = tprintf("probe_int_%s_%s_%d", strnode1name, instname, nodenum); char nodenumstr[3]; char *nodename1 = get_terminal_name(instname, itoa10(nodenum, nodenumstr), instances); if (!nodename1) { tfree(begstr); tfree(strnode1); + tfree(strnode1name); ds_free(&BVrefline); ds_free(&Bpowerline); ds_free(&Bpowersave); @@ -1391,7 +1399,7 @@ static int setallvsources(struct card *tmpcard, NGHASHPTR instances, char *instn newline = tprintf("%s %s %s", begstr, newnode, instline); - char* vline = tprintf("vcurr_%s:probe_int_%s:%s_%s %s %s 0", instname, nodename1, nodenumstr, strnode1, strnode1, newnode); + char* vline = tprintf("vcurr_%s:probe_int_%s:%s_%s %s %s 0", instname, nodename1, nodenumstr, strnode1name, strnode1, newnode); tfree(tmpcard->line); tmpcard->line = newline; @@ -1423,7 +1431,7 @@ static int setallvsources(struct card *tmpcard, NGHASHPTR instances, char *instn cadd(&Bpowerline, ':'); sadd(&Bpowerline, nodenumstr); cadd(&Bpowerline, '_'); - sadd(&Bpowerline, strnode1); + sadd(&Bpowerline, strnode1name); cadd(&Bpowerline, ')'); allsaves = wl_cons(copy(ds_get_buf(&Bpowersave)), allsaves); @@ -1431,6 +1439,7 @@ static int setallvsources(struct card *tmpcard, NGHASHPTR instances, char *instn tfree(begstr); tfree(strnode1); + tfree(strnode1name); tfree(newnode); tfree(nodename1); }