xspice, introduce cm_message_printf()

This commit is contained in:
rlar 2015-12-29 22:00:32 +01:00
parent 137f8e9641
commit 885e7df8a5
4 changed files with 50 additions and 8 deletions

View File

@ -85,6 +85,13 @@ int cm_event_queue(double time);
char *cm_message_get_errmsg(void);
int cm_message_send(char *msg);
#ifdef __GNUC__
int cm_message_printf(const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2)));
#else
int cm_message_printf(const char *fmt, ...);
#endif
double cm_netlist_get_c(void);
double cm_netlist_get_l(void);

View File

@ -179,9 +179,7 @@ void cm_filesource(ARGS) /* structure holding parms, inputs, outputs, etc.
free(p);
}
if (!loc->state->fp) {
char msg[512];
snprintf(msg, sizeof(msg), "cannot open file %s", PARAM(file));
cm_message_send(msg);
cm_message_printf("cannot open file %s", PARAM(file));
loc->state->atend = 1;
}
}

View File

@ -936,11 +936,8 @@ void cm_d_source(ARGS)
source = fopen(p, "r");
free(p);
}
if (!source) {
char msg[512];
snprintf(msg, sizeof(msg), "cannot open file %s", PARAM(input_file));
cm_message_send(msg);
}
if (!source)
cm_message_printf("cannot open file %s", PARAM(input_file));
}
/* increment counter if not a comment until EOF reached... */

View File

@ -17,6 +17,8 @@
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
@ -452,3 +454,41 @@ FILE *fopen_with_path(const char *path, const char *mode)
fp = fopen(path, mode);
return fp;
}
int
cm_message_printf(const char *fmt, ...)
{
char buf[1024];
char *p = buf;
int size = sizeof(buf);
int rv;
for (;;) {
int nchars;
va_list ap;
va_start(ap, fmt);
nchars = vsnprintf(p, (size_t) size, fmt, ap);
va_end(ap);
if (nchars == -1) { // compatibility to old implementations
size *= 2;
} else if (size < nchars + 1) {
size = nchars + 1;
} else {
break;
}
if (p == buf)
p = tmalloc((size_t) size * sizeof(char));
else
p = trealloc(p, (size_t) size * sizeof(char));
}
rv = cm_message_send(p);
if (p != buf)
txfree(p);
return rv;
}