Module Name: src Committed By: riastradh Date: Wed Jan 22 06:14:20 UTC 2014
Modified Files: src/usr.bin/vndcompress: Makefile vndcompress.c Added Files: src/usr.bin/vndcompress: utils.c utils.h Log Message: Move vndcompress utilities to utils.c. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/usr.bin/vndcompress/Makefile cvs rdiff -u -r0 -r1.1 src/usr.bin/vndcompress/utils.c \ src/usr.bin/vndcompress/utils.h cvs rdiff -u -r1.13 -r1.14 src/usr.bin/vndcompress/vndcompress.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/vndcompress/Makefile diff -u src/usr.bin/vndcompress/Makefile:1.4 src/usr.bin/vndcompress/Makefile:1.5 --- src/usr.bin/vndcompress/Makefile:1.4 Sun Aug 11 06:33:30 2013 +++ src/usr.bin/vndcompress/Makefile Wed Jan 22 06:14:20 2014 @@ -1,5 +1,5 @@ PROG= vndcompress -SRCS= main.c vndcompress.c vnduncompress.c +SRCS= main.c utils.c vndcompress.c vnduncompress.c LINKS= ${BINDIR}/vndcompress ${BINDIR}/vnduncompress MLINKS= vndcompress.1 vnduncompress.1 Index: src/usr.bin/vndcompress/vndcompress.c diff -u src/usr.bin/vndcompress/vndcompress.c:1.13 src/usr.bin/vndcompress/vndcompress.c:1.14 --- src/usr.bin/vndcompress/vndcompress.c:1.13 Mon May 6 22:53:24 2013 +++ src/usr.bin/vndcompress/vndcompress.c Wed Jan 22 06:14:20 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: vndcompress.c,v 1.13 2013/05/06 22:53:24 riastradh Exp $ */ +/* $NetBSD: vndcompress.c,v 1.14 2014/01/22 06:14:20 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: vndcompress.c,v 1.13 2013/05/06 22:53:24 riastradh Exp $"); +__RCSID("$NetBSD: vndcompress.c,v 1.14 2014/01/22 06:14:20 riastradh Exp $"); #include <sys/endian.h> @@ -49,13 +49,8 @@ __RCSID("$NetBSD: vndcompress.c,v 1.13 2 #include <unistd.h> #include <zlib.h> -/* XXX Seems to be missing from <stdio.h>... */ -int snprintf_ss(char *restrict, size_t, const char *restrict, ...) - __printflike(3, 4); -int vsnprintf_ss(char *restrict, size_t, const char *restrict, va_list) - __printflike(3, 0); - #include "common.h" +#include "utils.h" /* * XXX Switch to control bug-for-bug byte-for-byte compatibility with @@ -116,12 +111,6 @@ static uint32_t compress_block(int, int, static void compress_maybe_checkpoint(struct compress_state *); static void compress_checkpoint(struct compress_state *); static void compress_exit(struct compress_state *); -static ssize_t read_block(int, void *, size_t); -static void err_ss(int, const char *) __dead; -static void errx_ss(int, const char *, ...) __printflike(2, 3) __dead; -static void warn_ss(const char *); -static void warnx_ss(const char *, ...) __printflike(1, 2); -static void vwarnx_ss(const char *, va_list) __printflike(1, 0); /* * Compression entry point. @@ -949,97 +938,3 @@ compress_exit(struct compress_state *S) if (close(S->image_fd) == -1) warn("close(image fd)"); } - -/* - * Read, returning partial data only at end of file. - */ -static ssize_t -read_block(int fd, void *buffer, size_t n) -{ - char *p = buffer, *const end __unused = (p + n); - size_t total_read = 0; - - while (n > 0) { - const ssize_t n_read = read(fd, p, n); - if (n_read == -1) - return -1; - assert(n_read >= 0); - if (n_read == 0) - break; - - assert((size_t)n_read <= n); - n -= (size_t)n_read; - - assert(p <= end); - assert(n_read <= (end - p)); - p += (size_t)n_read; - - assert((size_t)n_read <= (SIZE_MAX - total_read)); - total_read += (size_t)n_read; - } - - return total_read; -} - -/* - * Signal-safe err/warn utilities. The errno varieties are limited to - * having no format arguments for reasons of laziness. - */ - -static void -err_ss(int exit_value, const char *msg) -{ - warn_ss(msg); - _Exit(exit_value); -} - -static void -errx_ss(int exit_value, const char *format, ...) -{ - va_list va; - - va_start(va, format); - vwarnx_ss(format, va); - va_end(va); - _Exit(exit_value); -} - -static void -warn_ss(const char *msg) -{ - int error = errno; - - warnx_ss("%s: %s", msg, strerror(error)); - - errno = error; -} - -static void -warnx_ss(const char *format, ...) -{ - va_list va; - - va_start(va, format); - vwarnx_ss(format, va); - va_end(va); -} - -static void -vwarnx_ss(const char *format, va_list va) -{ - char buf[128]; - - (void)strlcpy(buf, getprogname(), sizeof(buf)); - (void)strlcat(buf, ": ", sizeof(buf)); - - const int n = vsnprintf_ss(&buf[strlen(buf)], (sizeof(buf) - - strlen(buf)), format, va); - if (n <= 0) { - const char fallback[] = - "vndcompress: Help! I'm trapped in a signal handler!\n"; - (void)write(STDERR_FILENO, fallback, __arraycount(fallback)); - } else { - (void)strlcat(buf, "\n", sizeof(buf)); - (void)write(STDERR_FILENO, buf, strlen(buf)); - } -} Added files: Index: src/usr.bin/vndcompress/utils.c diff -u /dev/null src/usr.bin/vndcompress/utils.c:1.1 --- /dev/null Wed Jan 22 06:14:20 2014 +++ src/usr.bin/vndcompress/utils.c Wed Jan 22 06:14:20 2014 @@ -0,0 +1,147 @@ +/* $NetBSD: utils.c,v 1.1 2014/01/22 06:14:20 riastradh Exp $ */ + +/*- + * Copyright (c) 2013 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Taylor R. Campbell. + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``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 FOUNDATION OR CONTRIBUTORS + * 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 <sys/cdefs.h> +__RCSID("$NetBSD: utils.c,v 1.1 2014/01/22 06:14:20 riastradh Exp $"); + +#include <sys/types.h> + +#include <assert.h> +#include <err.h> +#include <errno.h> +#include <inttypes.h> +#include <limits.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +/* XXX Seems to be missing from <stdio.h>... */ +int snprintf_ss(char *restrict, size_t, const char *restrict, ...) + __printflike(3, 4); +int vsnprintf_ss(char *restrict, size_t, const char *restrict, va_list) + __printflike(3, 0); + +#include "utils.h" + +/* + * Read, returning partial data only at end of file. + */ +ssize_t +read_block(int fd, void *buffer, size_t n) +{ + char *p = buffer, *const end __unused = (p + n); + size_t total_read = 0; + + while (n > 0) { + const ssize_t n_read = read(fd, p, n); + if (n_read == -1) + return -1; + assert(n_read >= 0); + if (n_read == 0) + break; + + assert((size_t)n_read <= n); + n -= (size_t)n_read; + + assert(p <= end); + assert(n_read <= (end - p)); + p += (size_t)n_read; + + assert((size_t)n_read <= (SIZE_MAX - total_read)); + total_read += (size_t)n_read; + } + + return total_read; +} + +/* + * Signal-safe err/warn utilities. The errno varieties are limited to + * having no format arguments for reasons of laziness. + */ + +void +err_ss(int exit_value, const char *msg) +{ + warn_ss(msg); + _Exit(exit_value); +} + +void +errx_ss(int exit_value, const char *format, ...) +{ + va_list va; + + va_start(va, format); + vwarnx_ss(format, va); + va_end(va); + _Exit(exit_value); +} + +void +warn_ss(const char *msg) +{ + int error = errno; + + warnx_ss("%s: %s", msg, strerror(error)); + + errno = error; +} + +void +warnx_ss(const char *format, ...) +{ + va_list va; + + va_start(va, format); + vwarnx_ss(format, va); + va_end(va); +} + +void +vwarnx_ss(const char *format, va_list va) +{ + char buf[128]; + + (void)strlcpy(buf, getprogname(), sizeof(buf)); + (void)strlcat(buf, ": ", sizeof(buf)); + + const int n = vsnprintf_ss(&buf[strlen(buf)], (sizeof(buf) - + strlen(buf)), format, va); + if (n <= 0) { + const char fallback[] = + "vndcompress: Help! I'm trapped in a signal handler!\n"; + (void)write(STDERR_FILENO, fallback, __arraycount(fallback)); + } else { + (void)strlcat(buf, "\n", sizeof(buf)); + (void)write(STDERR_FILENO, buf, strlen(buf)); + } +} Index: src/usr.bin/vndcompress/utils.h diff -u /dev/null src/usr.bin/vndcompress/utils.h:1.1 --- /dev/null Wed Jan 22 06:14:20 2014 +++ src/usr.bin/vndcompress/utils.h Wed Jan 22 06:14:20 2014 @@ -0,0 +1,51 @@ +/* $NetBSD: utils.h,v 1.1 2014/01/22 06:14:20 riastradh Exp $ */ + +/*- + * Copyright (c) 2014 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Taylor R. Campbell. + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``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 FOUNDATION OR CONTRIBUTORS + * 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. + */ + +#ifndef VNDCOMPRESS_UTILS_H +#define VNDCOMPRESS_UTILS_H + +#include <sys/types.h> +#include <sys/cdefs.h> + +/* XXX Seems to be missing from <stdio.h>... */ +int snprintf_ss(char *restrict, size_t, const char *restrict, ...) + __printflike(3, 4); +int vsnprintf_ss(char *restrict, size_t, const char *restrict, va_list) + __printflike(3, 0); + +ssize_t read_block(int, void *, size_t); +void err_ss(int, const char *) __dead; +void errx_ss(int, const char *, ...) __printflike(2, 3) __dead; +void warn_ss(const char *); +void warnx_ss(const char *, ...) __printflike(1, 2); +void vwarnx_ss(const char *, va_list) __printflike(1, 0); + +#endif /* VNDCOMPRESS_UTILS_H */