need_arc4random=yes
need_bsd_getopt=yes
+need_err=yes
+need_errc=yes
need_progname=yes
need_md5=yes
need_nlist=yes
# On glibc >= 2.38, strlcpy() and strlcat() got added,
# so these could then be dropped on the next SOVERSION bump.
#need_strl=no
+ need_err=no
],
[*-musl*], [
# On musl >= 0.5.0, strlcpy() and strlcat() were already implemented,
# On musl >= 0.9.7, optreset got implemented, so bsd_getopt() can then
# be dropped on the next SOVERSION bump.
#need_bsd_getopt=no
+ need_err=no
# On musl >= 1.1.19, fopencookie() got implemented, and because we were
# checking for its presence to decide whether to build funopen(), it got
# included in builds even when previously it had not been included, which
# there, so we can avoid providing these with no ABI breakage.
need_arc4random=no
need_bsd_getopt=no
+ need_err=no
+ need_errc=no
need_progname=no
need_transparent_libmd=no
need_md5=no
AM_CONDITIONAL([NEED_ARC4RANDOM], [test "x$need_arc4random" = "xyes"])
AM_CONDITIONAL([NEED_BSD_GETOPT], [test "x$need_bsd_getopt" = "xyes"])
+AM_CONDITIONAL([NEED_ERR], [test "x$need_err" = "xyes"])
+AM_CONDITIONAL([NEED_ERRC], [test "x$need_errc" = "xyes"])
AM_CONDITIONAL([NEED_PROGNAME], [test "x$need_progname" = "xyes"])
AM_CONDITIONAL([NEED_TRANSPARENT_LIBMD], [test "x$need_transparent_libmd" = "xyes"])
AM_CONDITIONAL([NEED_MD5], [test "x$need_md5" = "xyes"])
byteorder.3bsd \
closefrom.3bsd \
dehumanize_number.3bsd \
- errc.3bsd \
expand_number.3bsd \
explicit_bzero.3bsd \
fgetln.3bsd \
vis.3bsd \
# EOL
+if NEED_ERRC
+dist_man_MANS += \
+ errc.3bsd \
+ # EOL
+endif
+
if NEED_PROGNAME
dist_man_MANS += \
getprogname.3bsd \
libbsd_la_SOURCES = \
closefrom.c \
dehumanize_number.c \
- err.c \
expand_number.c \
explicit_bzero.c \
fgetln.c \
vis.c \
# EOL
+if NEED_ERR
+libbsd_la_SOURCES += \
+ err.c \
+ # EOL
+endif
+
+if NEED_ERRC
+libbsd_la_SOURCES += \
+ errc.c \
+ # EOL
+endif
+
if NEED_PROGNAME
libbsd_la_SOURCES += \
progname.c \
/*
- * Copyright © 2006 Robert Millan
- * Copyright © 2011, 2019 Guillem Jover <guillem@hadrons.org>
+ * Copyright © 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
*/
#include <err.h>
-#ifdef LIBBSD_NEED_ERR_H_FUNCS
#include <errno.h>
-#endif
#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, ...)
-{
- va_list ap;
-
- va_start(ap, format);
- vwarnc(code, format, ap);
- va_end(ap);
-}
-
-void
-verrc(int status, 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));
- exit(status);
-}
-
-void
-errc(int status, int code, const char *format, ...)
-{
- va_list ap;
-
- va_start(ap, format);
- verrc(status, code, format, ap);
- va_end(ap);
-}
-
-#ifdef LIBBSD_NEED_ERR_H_FUNCS
void
vwarn(const char *format, va_list ap)
{
verrx(eval, format, ap);
va_end(ap);
}
-#endif
--- /dev/null
+/*
+ * Copyright © 2006 Robert Millan
+ * 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
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <err.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, ...)
+{
+ va_list ap;
+
+ va_start(ap, format);
+ vwarnc(code, format, ap);
+ va_end(ap);
+}
+
+void
+verrc(int status, 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));
+ exit(status);
+}
+
+void
+errc(int status, int code, const char *format, ...)
+{
+ va_list ap;
+
+ va_start(ap, format);
+ verrc(status, code, format, ap);
+ va_end(ap);
+}