mirror of
https://gitlab.freedesktop.org/libbsd/libbsd.git
synced 2025-04-21 00:11:56 +02:00
err: Rewrite warnc() and errc() family functions to be standalone
Do not depend on the system vwarn() and verr() functions to implement the *c() variants, as the system might actually lack any of the <err.h> BSD extensions.
This commit is contained in:
parent
f34a5f71d9
commit
9628798d7d
2
COPYING
2
COPYING
@ -81,7 +81,7 @@ Files:
|
||||
src/fgetln.c
|
||||
src/progname.c
|
||||
Copyright:
|
||||
Copyright © 2005, 2008-2012 Guillem Jover <guillem@hadrons.org>
|
||||
Copyright © 2005, 2008-2012, 2019 Guillem Jover <guillem@hadrons.org>
|
||||
Copyright © 2005 Hector Garcia Alvarez
|
||||
Copyright © 2005 Aurelien Jarno
|
||||
Copyright © 2006 Robert Millan
|
||||
|
@ -43,15 +43,15 @@
|
||||
#include <stdarg.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
void warnc(int code, const char *format, ...)
|
||||
__printflike(2, 3);
|
||||
void vwarnc(int code, const char *format, va_list ap)
|
||||
__printflike(2, 0);
|
||||
void warnc(int code, const char *format, ...)
|
||||
__printflike(2, 3);
|
||||
|
||||
void errc(int status, int code, const char *format, ...)
|
||||
__printflike(3, 4) __dead2;
|
||||
void verrc(int status, int code, const char *format, va_list ap)
|
||||
__printflike(3, 0) __dead2;
|
||||
void errc(int status, int code, const char *format, ...)
|
||||
__printflike(3, 4) __dead2;
|
||||
__END_DECLS
|
||||
|
||||
#endif
|
||||
|
38
src/err.c
38
src/err.c
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright © 2006 Robert Millan
|
||||
* Copyright © 2011 Guillem Jover <guillem@hadrons.org>
|
||||
* Copyright © 2011, 2019 Guillem Jover <guillem@hadrons.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@ -26,8 +26,21 @@
|
||||
*/
|
||||
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
void
|
||||
vwarnc(int code, const char *format, va_list ap)
|
||||
{
|
||||
fprintf(stderr, "%s: ", getprogname());
|
||||
if (format) {
|
||||
vfprintf(stderr, format, ap);
|
||||
fprintf(stderr, ": ");
|
||||
}
|
||||
fprintf(stderr, "%s\n", strerror(code));
|
||||
}
|
||||
|
||||
void
|
||||
warnc(int code, const char *format, ...)
|
||||
@ -40,13 +53,15 @@ warnc(int code, const char *format, ...)
|
||||
}
|
||||
|
||||
void
|
||||
vwarnc(int code, const char *format, va_list ap)
|
||||
verrc(int status, int code, const char *format, va_list ap)
|
||||
{
|
||||
int tmp = errno;
|
||||
|
||||
errno = code;
|
||||
vwarn(format, ap);
|
||||
errno = tmp;
|
||||
fprintf(stderr, "%s: ", getprogname());
|
||||
if (format) {
|
||||
vfprintf(stderr, format, ap);
|
||||
fprintf(stderr, ": ");
|
||||
}
|
||||
fprintf(stderr, "%s\n", strerror(code));
|
||||
exit(status);
|
||||
}
|
||||
|
||||
void
|
||||
@ -58,10 +73,3 @@ errc(int status, int code, const char *format, ...)
|
||||
verrc(status, code, format, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
|
||||
void
|
||||
verrc(int status, int code, const char *format, va_list ap)
|
||||
{
|
||||
errno = code;
|
||||
verr(status, format, ap);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user