From 5d302ee823d7b2222a7c1d69e75c71b664d2ad00 Mon Sep 17 00:00:00 2001 From: rlar Date: Thu, 23 Jun 2011 20:04:08 +0000 Subject: [PATCH] tiny rewrite, round to nearest integer and reset errno for strtol() --- ChangeLog | 10 +++++++--- src/xspice/mif/mifgetvalue.c | 24 ++++++++++++------------ 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4eec4e780..a5c44f33f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,14 @@ +2011-06-23 Robert Larice + * src/xspice/mif/mifgetvalue.c : + tiny rewrite, round to nearest integer and reset errno for strtol() + 2011-06-23 Holger Vogt - * /xspice/icm/analog/modpath.lst, - /xspice/icm/analog/file_source/cfunc.mod, + * /xspice/icm/analog/modpath.lst, + /xspice/icm/analog/file_source/cfunc.mod, /xspice/icm/analog/file_source/ifspec.ifs: code model with input from file added (T. Sailer) example/xspice/fstest.sp, sine.m: test of 'filesource' - + 2011-06-23 Robert Larice * src/frontend/options.c , * src/frontend/spiceif.c , diff --git a/src/xspice/mif/mifgetvalue.c b/src/xspice/mif/mifgetvalue.c index 812111c57..301c3091c 100755 --- a/src/xspice/mif/mifgetvalue.c +++ b/src/xspice/mif/mifgetvalue.c @@ -253,27 +253,27 @@ static int MIFget_integer(char *token, char **err) long l; double dtemp; char *endp; -/* long strtol(char *, char **, int); */ *err = NULL; + errno = 0; + l = strtol(token, &endp, 0); /* handles base 8, 10, 16 automatically */ + if(!errno && (*endp == '\0')) + return((int) l); + /* if error, probably caused by engineering suffixes, */ /* so try parsing with INPevaluate */ - if(errno || (*endp != '\0')) { - dtemp = INPevaluate(&token, &error, 1); - if(error) { - *err = "Bad integer, octal, or hex value"; - l = 0; - } - else if(dtemp > 0.0) - l = (long)(dtemp + 0.5); - else - l = (long)(dtemp - 0.5); + + dtemp = INPevaluate(&token, &error, 1); + + if(error) { + *err = "Bad integer, octal, or hex value"; + return(0); } - return((int) l); + return((int)floor(dtemp + 0.5)); }