diff -r c3fa6c2785dd -r 9d41e3611050 output.c --- a/output.c Mon Oct 02 17:57:46 2000 +0200 +++ b/output.c Fri Oct 27 15:17:27 2000 +0200 @@ -15,6 +15,12 @@ #include #include +#ifndef HAS_SYSTEM_ASPRINTF +#define NEED_ASPRINTF +#define NEED_VASPRINTF +#include "../snprintf_2.2/snprintf.h" +#endif + /* verbose */ @@ -96,15 +102,56 @@ } +#define CALL_V(NAME, ARGS) \ + va_list args; va_start(args, p); NAME ARGS; va_end(args); +#define CALL_V_RET(NAME, ARGS) \ + char *ret; va_list args; va_start(args, p); ret=NAME ARGS; va_end(args); return ret; + void warn(const char *p, ...) { - va_list args; - - va_start(args, p); - - warn_v(p, args); - - va_end(args); + CALL_V(warn_v, (p, args)); +} + + +char* errmsg(const char *p, ...) +{ + CALL_V_RET(errmsg_v, (p, args)); +} + + +void warn_obj(const char *obj, const char *p, ...) +{ + CALL_V(warn_obj_v, (obj, p, args)); +} + + +char *errmsg_obj(const char *obj, const char *p, ...) +{ + CALL_V_RET(errmsg_obj_v, (obj, p, args)); +} + + +void warn_obj_line(const char *obj, int line, const char *p, ...) +{ + CALL_V(warn_obj_line_v, (obj, line, p, args)); +} + + +char *errmsg_obj_line(const char *obj, int line, const char *p, ...) +{ + CALL_V_RET(errmsg_obj_line_v, (obj, line, p, args)); +} + + +void warn_obj_v(const char *obj, const char *p, va_list args) +{ + warn_obj_line_v(obj, -1, p, args); +} + + +char* errmsg_obj_v(const char *obj, const char *p, va_list args) +{ + return errmsg_obj_line_v(obj, -1, p, args); } @@ -116,37 +163,11 @@ } -void warn_obj(const char *obj, const char *p, ...) -{ - va_list args; - - va_start(args, p); - - warn_obj_v(obj, p, args); - - va_end(args); -} - - -void warn_obj_line(const char *obj, int line, const char *p, ...) +char *errmsg_v(const char *p, va_list args) { - va_list args; - - va_start(args, p); - - warn_obj_line_v(obj, line, p, args); - - va_end(args); -} - - -void warn_obj_v(const char *obj, const char *p, va_list args) -{ - put_prog_name(); - if(obj!=NULL) - fprintf(stderr,"%s: ", obj); - vfprintf(stderr, p, args); - putc('\n', stderr); + char *res; + vasprintf(&res, p, args); + return res; } @@ -167,6 +188,31 @@ } +char *errmsg_obj_line_v(const char *obj, int line, const char *p, va_list args) +{ + char *res1=NULL, *res2, *res3; + if(obj!=NULL){ + if(line>0) + asprintf(&res1, TR("%s:%d: "), obj, line); + else + asprintf(&res1, "%s: ", obj); + }else{ + if(line>0) + asprintf(&res1, TR("%d: "), line); + } + asprintf(&res2, p, args); + if(res1!=NULL){ + if(res2==NULL) + return NULL; + res3=scat(res1, res2); + free(res1); + free(res2); + return res3; + } + return res2; +} + + void warn_err() { put_prog_name(); @@ -174,6 +220,14 @@ } +char *errmsg_err() +{ + char *res; + asprintf(&res, "%s\n", strerror(errno)); + return res; +} + + void warn_err_obj(const char *obj) { put_prog_name(); @@ -181,7 +235,17 @@ fprintf(stderr, "%s: %s\n", obj, strerror(errno)); else fprintf(stderr, "%s\n", strerror(errno)); +} + +char *errmsg_err_obj(const char *obj) +{ + char *res; + if(obj!=NULL) + asprintf(&res, "%s: %s\n", obj, strerror(errno)); + else + asprintf(&res, "%s\n", strerror(errno)); + return res; } @@ -203,18 +267,30 @@ } +char *errmsg_err_obj_line(const char *obj, int line) +{ + char *res; + if(obj!=NULL){ + if(line>0) + asprintf(&res, TR("%s:%d: %s\n"), obj, line, strerror(errno)); + else + asprintf(&res, "%s: %s\n", obj, strerror(errno)); + }else{ + if(line>0) + asprintf(&res, TR("%d: %s\n"), line, strerror(errno)); + else + asprintf(&res, TR("%s\n"), strerror(errno)); + } + return res; +} + + /* die */ void die(const char *p, ...) { - va_list args; - - va_start(args, p); - - die_v(p, args); - - va_end(args); + CALL_V(die_v, (p, args)); } @@ -227,21 +303,13 @@ void die_obj(const char *obj, const char *p, ...) { - va_list args; - - va_start(args, p); - die_obj_v(obj, p, args); - va_end(args); + CALL_V(die_obj_v, (obj, p, args)); } void die_obj_line(const char *obj, int line, const char *p, ...) { - va_list args; - - va_start(args, p); - die_obj_line_v(obj, line, p, args); - va_end(args); + CALL_V(die_obj_line_v, (obj, line, p, args)); }