commit cfdc2da

shrub  ·  2026-06-24 00:13:32 +0000 UTC
parent 8694e0e
remove shar
5 files changed,  +2, -279
+1, -1
1@@ -1,7 +1,7 @@
2 .POSIX:
3 
4 #RECURSIVE MAKE CONSIDERED USEFUL?
5-SUBDIRS = compat apply col ctags finger jot look makefs pr rs script shar
6+SUBDIRS = compat apply col ctags finger jot look makefs pr rs script
7 all:
8 	@set -e; \
9 	for dir in $(SUBDIRS); do \
+1, -2
 1@@ -12,7 +12,6 @@ misc programs from netbsd with some compatibilty shim and portability bits.
 2 - pr
 3 - rs 
 4 - script
 5-- shar
 6 
 7 you need: 
 8 
 9@@ -25,4 +24,4 @@ on musl:
10 
11 - musl-fts
12 
13-all netbsd code under it's original license. shar is not from netbsd, and is public domain.
14+all netbsd code under it's original license.
+0, -26
 1@@ -1,26 +0,0 @@
 2-.POSIX:
 3-
 4-PROG = shar
 5-SRCS = shar.c
 6-MAN = shar.1
 7-
 8-CC = cc
 9-CFLAGS = -O2
10-DESTDIR =
11-BINDIR = /usr/local/bin
12-MANDIR = /usr/local/share/man
13-
14-all: $(PROG)
15-
16-$(PROG): $(SRCS)
17-	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ $(SRCS) $(LDLIBS)
18-
19-install: $(PROG)
20-	mkdir -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(MANDIR)/man1
21-	cp $(PROG) $(DESTDIR)$(BINDIR)/$(PROG)
22-	chmod 755 $(DESTDIR)$(BINDIR)/$(PROG)
23-	cp $(MAN) $(DESTDIR)$(MANDIR)/man1/$(MAN)
24-	chmod 644 $(DESTDIR)$(MANDIR)/man1/$(MAN)
25-
26-clean:
27-	rm -f $(PROG) *.o
+0, -93
 1@@ -1,93 +0,0 @@
 2-.\"	$NetBSD: shar.1,v 1.14 2023/01/25 19:52:14 rillig Exp $
 3-.\" [[[[ SLIGHTLY MODIFIED BY SHRUB :) ]]]]
 4-.\" Copyright (c) 1990, 1993
 5-.\"	The Regents of the University of California.  All rights reserved.
 6-.\"
 7-.\" Redistribution and use in source and binary forms, with or without
 8-.\" modification, are permitted provided that the following conditions
 9-.\" are met:
10-.\" 1. Redistributions of source code must retain the above copyright
11-.\"    notice, this list of conditions and the following disclaimer.
12-.\" 2. Redistributions in binary form must reproduce the above copyright
13-.\"    notice, this list of conditions and the following disclaimer in the
14-.\"    documentation and/or other materials provided with the distribution.
15-.\" 3. Neither the name of the University nor the names of its contributors
16-.\"    may be used to endorse or promote products derived from this software
17-.\"    without specific prior written permission.
18-.\"
19-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29-.\" SUCH DAMAGE.
30-.\"
31-.\"     @(#)shar.1	8.1 (Berkeley) 6/6/93
32-.\"
33-.Dd May 27, 2026
34-.Dt SHAR 1
35-.Os
36-.Sh NAME
37-.Nm shar
38-.Nd create a shell archive of files
39-.Sh SYNOPSIS
40-.Nm
41-.Ar
42-.Sh DESCRIPTION
43-.Nm
44-writes an
45-.Xr sh 1
46-shell script to the standard output which will recreate the file
47-hierarchy specified by the command line operands.
48-Parent directories for file operands are created as needed.
49-File and directory permissions are restored.
50-.Pp
51-.Nm
52-is normally used for distributing files by
53-.Xr ftp 1
54-or
55-.Xr mail 1 .
56-.Sh EXAMPLES
57-To create a shell archive of the program
58-.Xr ls 1
59-and mail it to Rick:
60-.Bd -literal -offset indent
61-cd ls
62-shar `find . -print` \&|  mail -s "ls source" rick
63-.Ed
64-.Pp
65-To recreate the program directory:
66-.Bd -literal -offset indent
67-mkdir ls
68-cd ls
69-\&...
70-<delete header lines and examine mailed archive>
71-\&...
72-sh archive
73-.Ed
74-.Sh SEE ALSO
75-.Xr compress 1 ,
76-.Xr mail 1 ,
77-.Xr tar 1 ,
78-.Xr uuencode 1
79-.Sh HISTORY
80-The
81-.Nm
82-command appeared in
83-.Bx 4.4 .
84-.Sh BUGS
85-.Nm
86-makes no provisions for special types of files.
87-It is not intended for binary files containing NUL bytes.
88-.Sh SECURITY CONSIDERATIONS
89-It is easy to insert trojan horses into
90-.Nm
91-files.
92-It is strongly recommended that all shell archive files be examined
93-before running them through
94-.Xr sh 1 .
+0, -157
  1@@ -1,157 +0,0 @@
  2-/*small shar in C inspired by netbsd shar script but with some 
  3- * improvements, public domain :] */
  4-
  5-#include <sys/stat.h>
  6-
  7-#include <errno.h>
  8-#include <stdio.h>
  9-#include <stdlib.h>
 10-#include <string.h>
 11-
 12-
 13-/* single quote path name */
 14-static void
 15-q(char *s)
 16-{
 17-	putchar('\'');
 18-	for (; *s; s++)
 19-		if (*s == '\'')
 20-			fputs("'\\''", stdout);
 21-		else
 22-			putchar(*s);
 23-	putchar('\'');
 24-}
 25-
 26-static void
 27-qt(char *s, char *t)
 28-{
 29-	q(s);
 30-	fputs(t, stdout);
 31-}
 32-
 33-static void
 34-mkpar(char *s)
 35-{
 36-	char *p, *e;
 37-	size_t n;
 38-
 39-	if ((e = strrchr(s, '/')) == NULL || e == s)
 40-		return;
 41-	n = e - s;
 42-	if ((p = malloc(n + 1)) == NULL) {
 43-		fprintf(stderr, "shar: %s\n", strerror(errno));
 44-		exit(1);
 45-	}
 46-	memcpy(p, s, n);
 47-	p[n] = 0;
 48-	fputs("mkdir -p ", stdout);
 49-	q(p);
 50-	fputs(" > /dev/null 2>&1\n", stdout);
 51-	free(p);
 52-}
 53-
 54-static int
 55-readfile(char *s)
 56-{
 57-	FILE *f;
 58-	struct stat st;
 59-	int c, bol = 1;
 60-
 61-	if ((f = fopen(s, "r")) == NULL) {
 62-		fprintf(stderr, "shar: %s: %s\n", s, strerror(errno));
 63-		return 1;
 64-	}
 65-	if (fstat(fileno(f), &st) == -1) {
 66-		fprintf(stderr, "shar: %s: %s\n", s, strerror(errno));
 67-		fclose(f);
 68-		return 1;
 69-	}
 70-	mkpar(s);
 71-	fputs("echo x - ", stdout);
 72-	q(s);
 73-	fputs("\nsed 's/^X//' >", stdout);
 74-	q(s);
 75-	fputs(" << 'SHAR_EOF'\n", stdout);
 76-	while ((c = getc(f)) != EOF) {
 77-		if (bol)
 78-			putchar('X');
 79-		putchar(c);
 80-		bol = c == '\n';
 81-	}
 82-	if (ferror(f)) {
 83-		fprintf(stderr, "shar: %s: %s\n", s, strerror(errno));
 84-		fclose(f);
 85-		return 1;
 86-	}
 87-	fclose(f);
 88-	/* netbsd shar glues the marker to non newline files but we fix and trim */
 89-	if (!bol)
 90-		putchar('\n');
 91-	fputs("SHAR_EOF\n", stdout);
 92-	if (!bol) {
 93-		fputs("dd if=", stdout);
 94-		q(s);
 95-		fputs(" of=", stdout);
 96-		qt(s, ".$$");
 97-		printf(" bs=1 count=%lld > /dev/null 2>&1 && mv ",
 98-		    (long long)st.st_size);
 99-		qt(s, ".$$");
100-		putchar(' ');
101-		q(s);
102-		putchar('\n');
103-	}
104-	printf("chmod %03o ", (unsigned)st.st_mode & 0777);
105-	q(s);
106-	putchar('\n');
107-	return 0;
108-}
109-
110-static void
111-makedir(char *s, mode_t m)
112-{
113-	fputs("echo c - ", stdout);
114-	q(s);
115-	fputs("\nmkdir -p ", stdout);
116-	q(s);
117-	fputs(" > /dev/null 2>&1\n", stdout);
118-	printf("chmod %03o ", (unsigned)m & 0777);
119-	q(s);
120-	putchar('\n');
121-}
122-
123-static void
124-head(int n, char **v)
125-{
126-	int i;
127-
128-	fputs("# This is a shell archive.  Save it in a file, remove anything before\n"
129-	    "# this line, and then unpack it by entering \"sh file\".  Note, it may\n"
130-	    "# create directories; files and directories will be owned by you and\n"
131-	    "# have their original permissions.\n"
132-	    "#\n"
133-	    "# This archive contains:\n"
134-	    "#\n", stdout);
135-	for (i = 1; i < n; i++)
136-		printf("#\t%s\n", v[i]);
137-	printf("#\n");
138-}
139-
140-int
141-main(int n, char **v)
142-{
143-	struct stat st;
144-	int i;
145-
146-	if (n == 1) {
147-		fprintf(stderr, "usage: shar [file ...]\n");
148-		return 1;
149-	}
150-	head(n, v);
151-	for (i = 1; i < n; i++)
152-		if (stat(v[i], &st) == 0 && S_ISDIR(st.st_mode))
153-			makedir(v[i], st.st_mode);
154-		else if (readfile(v[i]))
155-			return 1;
156-	printf("exit\n\n");
157-	return 0;
158-}