diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist index cb35fa3b337f..d025fbf62fc5 100644 --- a/etc/mtree/BSD.tests.dist +++ b/etc/mtree/BSD.tests.dist @@ -712,8 +712,6 @@ .. soelim .. - sponge - .. stat .. tail diff --git a/usr.bin/Makefile b/usr.bin/Makefile index 8aadb9f604ea..b4c24640b6d3 100644 --- a/usr.bin/Makefile +++ b/usr.bin/Makefile @@ -148,7 +148,6 @@ SUBDIR= alias \ soelim \ sort \ split \ - sponge \ stat \ stdbuf \ strings \ diff --git a/usr.bin/sponge/Makefile b/usr.bin/sponge/Makefile deleted file mode 100644 index d71927ab8691..000000000000 --- a/usr.bin/sponge/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# $FreeBSD$ - -PROG= sponge - -HAS_TESTS= -SUBDIR.${MK_TESTS}+= tests - -.include diff --git a/usr.bin/sponge/sponge.1 b/usr.bin/sponge/sponge.1 deleted file mode 100644 index 0b9860c03471..000000000000 --- a/usr.bin/sponge/sponge.1 +++ /dev/null @@ -1,75 +0,0 @@ -.\" Eitan Adler. All rights reserved. -.\" -.\" 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 REGENTS 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 REGENTS 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. -.\" -.\" $FreeBSD$ -.\" -.Dd November 1, 2017 -.Dt SPONGE 1 -.Os -.Sh NAME -.Nm sponge -.Nd buffer stdin and write to stdout -.Sh SYNOPSIS -.Nm -.Op Fl a -.Ar filename -.Sh DESCRIPTION -The -.Nm -utility reads standard in until complete, then opens -the output file and writes to it. -This makes it useful in pipelines that read a file and then write to it. -These options are available: -.Bl -tag -width indent -.It Fl a -Open -.Ar filename -in append mode. -.El -.Pp -If an attempt to allocate memory fails, -.Nm -fails without output. -The file is written even if earlier components -of the pipeline failed. -.Sh SEE ALSO -.Xr builtin 1 , -.Xr csh 1 , -.Xr getrusage 2 , -.Xr tee 1 , -.Xr wait 2 -.Sh EXIT STATUS -.Ex -std -.Sh EXAMPLES -A -.Pa file -can be be sorted "in place" by executing -.Cm sort file | sponge file -.Sh HISTORY -The -.Nm -utility was written by -.An Eitan Adler Aq Mt eadler@FreeBSD.org -and first appeared -in -.Fx 12.0 . diff --git a/usr.bin/sponge/sponge.c b/usr.bin/sponge/sponge.c deleted file mode 100644 index 81bf864e10ca..000000000000 --- a/usr.bin/sponge/sponge.c +++ /dev/null @@ -1,191 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause - * - * Copyright (c) 2017 Eitan Adler - * - * 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 REGENTS 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 REGENTS 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. - * - * $FreeBSD$ - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define DEFAULT_BUF_SIZE 16384 -#define DEFAULT_BUF_CNT 12 - -static int flag_append = 0; - -static void usage(void); -static void *safe_malloc(size_t size); -static void *safe_calloc(size_t count, size_t size); -static void *safe_reallocf(void *ptr, size_t size); - -static void * -safe_malloc(size_t size) -{ - void *ret; - - ret = malloc(size); - if (ret == NULL) { - err(1, "malloc failed"); - } - return (ret); -} - -static void * -safe_calloc(size_t count, size_t size) -{ - void *ret; - - ret = calloc(count, size); - if (ret == NULL) { - err(1, "calloc failed"); - } - return (ret); -} - -static void * -safe_reallocf(void *ptr, size_t size) -{ - void *ret; - - ret = reallocf(ptr, size); - if (ret == NULL) { - err(1, "reallocf failed"); - } - return (ret); -} - -static void -usage(void) -{ - fprintf(stderr, "usage: sponge [-a] filename\n"); -} - -int -main(int argc, char* argv[]) -{ - struct iovec *iov; - char *buf; - char *outfile; - ssize_t i; - size_t bufcnt; - size_t whichbuf; - size_t bufremain; - long maxiovec; - int fd; - int openflags = O_WRONLY; - int opt; - - while ((opt = getopt(argc, argv, "ah")) != -1) { - switch (opt) { - case 'a': - flag_append = 1; - break; - case 'h': - usage(); - exit(0); - case '?': - default: - usage(); - exit(1); - } - } - - if (optind < argc) { - outfile = argv[optind]; - } - - - bufcnt = DEFAULT_BUF_CNT; - whichbuf = 0; - iov = safe_calloc(bufcnt, sizeof(*iov)); - - for (;;) { - buf = safe_malloc(DEFAULT_BUF_SIZE); - i = read(STDIN_FILENO, buf, DEFAULT_BUF_SIZE); - if (whichbuf == bufcnt) { - bufcnt *= 2; - iov = safe_reallocf(iov, bufcnt * sizeof(*iov)); - } - if (i < 0) { - err(1, "read failed"); - } - if (i == 0) { - free(buf); - break; - } - iov[whichbuf].iov_base = buf; - iov[whichbuf].iov_len = i; - whichbuf++; - } - - if (outfile) { - if (flag_append) { - openflags |= O_APPEND; - } else { - openflags |= O_TRUNC; - } - fd = open(outfile, openflags); - } - else { - fd = STDOUT_FILENO; - } - - if (fd < 0) { - err(1, "failed to open"); - } - - maxiovec = sysconf(_SC_IOV_MAX); - if (maxiovec == -1) { - maxiovec = _XOPEN_IOV_MAX; - } - bufcnt = whichbuf; - bufremain = bufcnt; - - while (bufremain > 0) { - whichbuf = bufremain < (unsigned long) maxiovec - ? bufremain : maxiovec; - bufremain -= whichbuf; - - i = writev(fd, iov, whichbuf); - if (i < 0) { - err(1, "failed to write"); - } - } - - if (outfile) { - i = close(fd); - if (i < 0) { - err(1, "failed to close"); - } - } -} diff --git a/usr.bin/sponge/tests/Makefile b/usr.bin/sponge/tests/Makefile deleted file mode 100644 index 9e325fcf28a6..000000000000 --- a/usr.bin/sponge/tests/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# $FreeBSD$ - -PACKAGE= tests - -TESTSDIR= ${TESTSBASE}/usr.bin/sponge - -ATF_TESTS_SH= sponge_test - -.include diff --git a/usr.bin/sponge/tests/Makefile.depend b/usr.bin/sponge/tests/Makefile.depend deleted file mode 100644 index c062f6026d94..000000000000 --- a/usr.bin/sponge/tests/Makefile.depend +++ /dev/null @@ -1,18 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! - -DIRDEPS = \ - gnu/lib/csu \ - include \ - include/xlocale \ - lib/${CSU_DIR} \ - lib/atf/libatf-c \ - lib/libc \ - lib/libcompiler_rt \ - - -.include - -.if ${DEP_RELDIR} == ${_DEP_RELDIR} -# local dependencies - needed for -jN in clean tree -.endif diff --git a/usr.bin/sponge/tests/sponge_test.sh b/usr.bin/sponge/tests/sponge_test.sh deleted file mode 100755 index 2fe81f15c31c..000000000000 --- a/usr.bin/sponge/tests/sponge_test.sh +++ /dev/null @@ -1,48 +0,0 @@ -# $FreeBSD$ -# -# SPDX-License-Identifier: BSD-2-Clause -# -# Copyright 2017 Eitan Adler -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * 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 COPYRIGHT HOLDERS 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 COPYRIGHT -# OWNER 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. - -atf_test_case simple -simple_body() { - printf 'd\ne\na\n' >| x - printf 'a\nd\ne\n' >| y - sort x | sponge x - - atf_check -s exit:0 -o empty -e empty -x 'sort x | sponge x' - - if ! cmp -s x y; then - echo "x and y differ, but they should be equal" - diff -u x y - atf_fail "Original and copy do not match" - fi - -} - -atf_init_test_cases() { - atf_add_test_case simple -} diff --git a/usr.bin/tee/tee.1 b/usr.bin/tee/tee.1 index 1dc0fbcfdd50..546c489377c9 100644 --- a/usr.bin/tee/tee.1 +++ b/usr.bin/tee/tee.1 @@ -72,8 +72,6 @@ utility takes the default action for all signals, except in the event of the .Fl i option. -.Sh SEE ALSO -.Xr sponge 1 .Sh EXIT STATUS .Ex -std .Sh STANDARDS