// Simple wrapper for pvm_perror // Allows use of formatted strings #include "errlog.h" int errlog(char *fmt, ...){ va_list ap; char *p, *sval; char str[ERROR_BUFF], temp[ERROR_BUFF]; int ival; long lval; double dval; str[0] = '\0'; va_start(ap, fmt); // make ap point to 1st unnamed arg for (p = fmt; *p; p++) { if (*p != '%'){ sprintf(temp, "%c", *p); strcat(str,temp); continue; } switch (*++p) { case 'd': ival = va_arg(ap, int); sprintf(temp,"%d", ival); strcat(str,temp); break; case 'f': dval = va_arg(ap, double); sprintf(temp,"%f", dval); strcat(str,temp); break; case 'l': lval = va_arg(ap, long); sprintf(temp,"%ld", lval); strcat(str,temp); break; case 's': sval = va_arg(ap, char*); strcat(str,sval); break; default: strcat(str,p); break; } } va_end(ap); // clean up when done return pvm_perror(str); }