resask.c: avoid segfault if @R[i] is asked before analysis is run
This commit is contained in:
parent
9eaff645f5
commit
417d109764
|
|
@ -139,28 +139,43 @@ RESask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value,
|
||||||
errRtn = "RESask";
|
errRtn = "RESask";
|
||||||
strcpy(errMsg, msg);
|
strcpy(errMsg, msg);
|
||||||
return(E_ASKCURRENT);
|
return(E_ASKCURRENT);
|
||||||
} else {
|
} else if (ckt->CKTrhsOld) {
|
||||||
value->rValue = (*(ckt->CKTrhsOld + fast->RESposNode) -
|
value->rValue = (*(ckt->CKTrhsOld + fast->RESposNode) -
|
||||||
*(ckt->CKTrhsOld + fast->RESnegNode))
|
*(ckt->CKTrhsOld + fast->RESnegNode))
|
||||||
*fast->RESconduct;
|
*fast->RESconduct;
|
||||||
value->rValue *= fast->RESm;
|
value->rValue *= fast->RESm;
|
||||||
|
return(OK);
|
||||||
|
} else {
|
||||||
|
char msgloc[BSIZE_SP];
|
||||||
|
sprintf(msgloc, "No current values available for %s", fast->RESname);
|
||||||
|
errMsg = TMALLOC(char, strlen(msgloc) + 1);
|
||||||
|
errRtn = "RESask";
|
||||||
|
strcpy(errMsg, msgloc);
|
||||||
|
return(E_ASKCURRENT);
|
||||||
}
|
}
|
||||||
return(OK);
|
|
||||||
case RES_POWER:
|
case RES_POWER:
|
||||||
if (ckt->CKTcurrentAnalysis & DOING_AC) {
|
if (ckt->CKTcurrentAnalysis & DOING_AC) {
|
||||||
errMsg = TMALLOC(char, strlen(msg) + 1);
|
errMsg = TMALLOC(char, strlen(msg) + 1);
|
||||||
errRtn = "RESask";
|
errRtn = "RESask";
|
||||||
strcpy(errMsg, msg);
|
strcpy(errMsg, msg);
|
||||||
return(E_ASKPOWER);
|
return(E_ASKPOWER);
|
||||||
} else {
|
} else if (ckt->CKTrhsOld) {
|
||||||
value->rValue = (*(ckt->CKTrhsOld + fast->RESposNode) -
|
value->rValue = (*(ckt->CKTrhsOld + fast->RESposNode) -
|
||||||
*(ckt->CKTrhsOld + fast->RESnegNode)) *
|
*(ckt->CKTrhsOld + fast->RESnegNode)) *
|
||||||
fast->RESconduct *
|
fast->RESconduct *
|
||||||
(*(ckt->CKTrhsOld + fast->RESposNode) -
|
(*(ckt->CKTrhsOld + fast->RESposNode) -
|
||||||
*(ckt->CKTrhsOld + fast->RESnegNode));
|
*(ckt->CKTrhsOld + fast->RESnegNode));
|
||||||
value->rValue *= fast->RESm;
|
value->rValue *= fast->RESm;
|
||||||
|
return(OK);
|
||||||
|
} else {
|
||||||
|
char msgloc[BSIZE_SP];
|
||||||
|
sprintf(msgloc, "No power values available for %s", fast->RESname);
|
||||||
|
errMsg = TMALLOC(char, strlen(msgloc) + 1);
|
||||||
|
errRtn = "RESask";
|
||||||
|
strcpy(errMsg, msgloc);
|
||||||
|
return(E_ASKCURRENT);
|
||||||
}
|
}
|
||||||
return(OK);
|
|
||||||
default:
|
default:
|
||||||
return(E_BADPARM);
|
return(E_BADPARM);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue