writeall makes successive write calls to write an entire buffer to the output file descriptor. It returns the number of bytes written, or -1 on the first error.
		
			
				
	
	
		
			278 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			278 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| include config.mk
 | |
| 
 | |
| .SUFFIXES:
 | |
| .SUFFIXES: .o .c
 | |
| 
 | |
| HDR =\
 | |
| 	arg.h\
 | |
| 	compat.h\
 | |
| 	crypt.h\
 | |
| 	fs.h\
 | |
| 	md5.h\
 | |
| 	queue.h\
 | |
| 	sha1.h\
 | |
| 	sha224.h\
 | |
| 	sha256.h\
 | |
| 	sha384.h\
 | |
| 	sha512.h\
 | |
| 	sha512-224.h\
 | |
| 	sha512-256.h\
 | |
| 	text.h\
 | |
| 	utf.h\
 | |
| 	util.h
 | |
| 
 | |
| LIBUTF = libutf.a
 | |
| LIBUTFSRC =\
 | |
| 	libutf/fgetrune.c\
 | |
| 	libutf/fputrune.c\
 | |
| 	libutf/isalnumrune.c\
 | |
| 	libutf/isalpharune.c\
 | |
| 	libutf/isblankrune.c\
 | |
| 	libutf/iscntrlrune.c\
 | |
| 	libutf/isdigitrune.c\
 | |
| 	libutf/isgraphrune.c\
 | |
| 	libutf/isprintrune.c\
 | |
| 	libutf/ispunctrune.c\
 | |
| 	libutf/isspacerune.c\
 | |
| 	libutf/istitlerune.c\
 | |
| 	libutf/isxdigitrune.c\
 | |
| 	libutf/lowerrune.c\
 | |
| 	libutf/rune.c\
 | |
| 	libutf/runetype.c\
 | |
| 	libutf/upperrune.c\
 | |
| 	libutf/utf.c\
 | |
| 	libutf/utftorunestr.c
 | |
| 
 | |
| LIBUTIL = libutil.a
 | |
| LIBUTILSRC =\
 | |
| 	libutil/concat.c\
 | |
| 	libutil/cp.c\
 | |
| 	libutil/crypt.c\
 | |
| 	libutil/ealloc.c\
 | |
| 	libutil/enmasse.c\
 | |
| 	libutil/eprintf.c\
 | |
| 	libutil/eregcomp.c\
 | |
| 	libutil/estrtod.c\
 | |
| 	libutil/fnck.c\
 | |
| 	libutil/fshut.c\
 | |
| 	libutil/getlines.c\
 | |
| 	libutil/human.c\
 | |
| 	libutil/linecmp.c\
 | |
| 	libutil/md5.c\
 | |
| 	libutil/memmem.c\
 | |
| 	libutil/mkdirp.c\
 | |
| 	libutil/mode.c\
 | |
| 	libutil/parseoffset.c\
 | |
| 	libutil/putword.c\
 | |
| 	libutil/reallocarray.c\
 | |
| 	libutil/recurse.c\
 | |
| 	libutil/rm.c\
 | |
| 	libutil/sha1.c\
 | |
| 	libutil/sha224.c\
 | |
| 	libutil/sha256.c\
 | |
| 	libutil/sha384.c\
 | |
| 	libutil/sha512.c\
 | |
| 	libutil/sha512-224.c\
 | |
| 	libutil/sha512-256.c\
 | |
| 	libutil/strcasestr.c\
 | |
| 	libutil/strlcat.c\
 | |
| 	libutil/strlcpy.c\
 | |
| 	libutil/strsep.c\
 | |
| 	libutil/strtonum.c\
 | |
| 	libutil/unescape.c\
 | |
| 	libutil/writeall.c
 | |
| 
 | |
| LIB = $(LIBUTF) $(LIBUTIL)
 | |
| 
 | |
| BIN =\
 | |
| 	basename\
 | |
| 	cal\
 | |
| 	cat\
 | |
| 	chgrp\
 | |
| 	chmod\
 | |
| 	chown\
 | |
| 	chroot\
 | |
| 	cksum\
 | |
| 	cmp\
 | |
| 	cols\
 | |
| 	comm\
 | |
| 	cp\
 | |
| 	cron\
 | |
| 	cut\
 | |
| 	date\
 | |
| 	dirname\
 | |
| 	du\
 | |
| 	echo\
 | |
| 	ed\
 | |
| 	env\
 | |
| 	expand\
 | |
| 	expr\
 | |
| 	false\
 | |
| 	find\
 | |
| 	flock\
 | |
| 	fold\
 | |
| 	getconf\
 | |
| 	grep\
 | |
| 	head\
 | |
| 	hostname\
 | |
| 	join\
 | |
| 	kill\
 | |
| 	link\
 | |
| 	ln\
 | |
| 	logger\
 | |
| 	logname\
 | |
| 	ls\
 | |
| 	md5sum\
 | |
| 	mkdir\
 | |
| 	mkfifo\
 | |
| 	mktemp\
 | |
| 	mv\
 | |
| 	nice\
 | |
| 	nl\
 | |
| 	nohup\
 | |
| 	od\
 | |
| 	paste\
 | |
| 	pathchk\
 | |
| 	printenv\
 | |
| 	printf\
 | |
| 	pwd\
 | |
| 	readlink\
 | |
| 	renice\
 | |
| 	rev\
 | |
| 	rm\
 | |
| 	rmdir\
 | |
| 	sed\
 | |
| 	seq\
 | |
| 	setsid\
 | |
| 	sha1sum\
 | |
| 	sha224sum\
 | |
| 	sha256sum\
 | |
| 	sha384sum\
 | |
| 	sha512sum\
 | |
| 	sha512-224sum\
 | |
| 	sha512-256sum\
 | |
| 	sleep\
 | |
| 	sort\
 | |
| 	split\
 | |
| 	sponge\
 | |
| 	strings\
 | |
| 	sync\
 | |
| 	tail\
 | |
| 	tar\
 | |
| 	tee\
 | |
| 	test\
 | |
| 	tftp\
 | |
| 	time\
 | |
| 	touch\
 | |
| 	tr\
 | |
| 	true\
 | |
| 	tsort\
 | |
| 	tty\
 | |
| 	uname\
 | |
| 	unexpand\
 | |
| 	uniq\
 | |
| 	unlink\
 | |
| 	uudecode\
 | |
| 	uuencode\
 | |
| 	wc\
 | |
| 	which\
 | |
| 	whoami\
 | |
| 	xargs\
 | |
| 	xinstall\
 | |
| 	yes
 | |
| 
 | |
| LIBUTFOBJ = $(LIBUTFSRC:.c=.o)
 | |
| LIBUTILOBJ = $(LIBUTILSRC:.c=.o)
 | |
| OBJ = $(BIN:=.o) $(LIBUTFOBJ) $(LIBUTILOBJ)
 | |
| SRC = $(BIN:=.c)
 | |
| MAN = $(BIN:=.1)
 | |
| 
 | |
| all: $(BIN)
 | |
| 
 | |
| $(BIN): $(LIB) $(@:=.o)
 | |
| 
 | |
| $(OBJ): $(HDR) config.mk
 | |
| 
 | |
| .o:
 | |
| 	$(CC) $(LDFLAGS) -o $@ $< $(LIB)
 | |
| 
 | |
| .c.o:
 | |
| 	$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<
 | |
| 
 | |
| $(LIBUTF): $(LIBUTFOBJ)
 | |
| 	$(AR) rc $@ $?
 | |
| 	$(RANLIB) $@
 | |
| 
 | |
| $(LIBUTIL): $(LIBUTILOBJ)
 | |
| 	$(AR) rc $@ $?
 | |
| 	$(RANLIB) $@
 | |
| 
 | |
| getconf.o: getconf.h
 | |
| 
 | |
| getconf.h: getconf.sh
 | |
| 	./getconf.sh > $@
 | |
| 
 | |
| install: all
 | |
| 	mkdir -p $(DESTDIR)$(PREFIX)/bin
 | |
| 	cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin
 | |
| 	cd $(DESTDIR)$(PREFIX)/bin && ln -f test [ && chmod 755 $(BIN)
 | |
| 	mv -f $(DESTDIR)$(PREFIX)/bin/xinstall $(DESTDIR)$(PREFIX)/bin/install
 | |
| 	mkdir -p $(DESTDIR)$(MANPREFIX)/man1
 | |
| 	for m in $(MAN); do sed "s/^\.Os sbase/.Os sbase $(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man1/"$$m"; done
 | |
| 	cd $(DESTDIR)$(MANPREFIX)/man1 && chmod 644 $(MAN)
 | |
| 	mv -f $(DESTDIR)$(MANPREFIX)/man1/xinstall.1 $(DESTDIR)$(MANPREFIX)/man1/install.1
 | |
| 
 | |
| uninstall:
 | |
| 	cd $(DESTDIR)$(PREFIX)/bin && rm -f $(BIN) [ install
 | |
| 	cd $(DESTDIR)$(MANPREFIX)/man1 && rm -f $(MAN) install.1
 | |
| 
 | |
| dist: clean
 | |
| 	mkdir -p sbase-$(VERSION)
 | |
| 	cp -r LICENSE Makefile README TODO config.mk $(SRC) $(MAN) libutf libutil $(HDR) sbase-$(VERSION)
 | |
| 	tar -cf sbase-$(VERSION).tar sbase-$(VERSION)
 | |
| 	gzip sbase-$(VERSION).tar
 | |
| 	rm -rf sbase-$(VERSION)
 | |
| 
 | |
| sbase-box: $(LIB) $(SRC)
 | |
| 	mkdir -p build
 | |
| 	cp $(HDR) build
 | |
| 	cp getconf.h build
 | |
| 	for f in $(SRC); do sed "s/^main(/$$(echo "$${f%.c}" | sed s/-/_/g)_&/" < $$f > build/$$f; done
 | |
| 	echo '#include <libgen.h>'                                                                                                     > build/$@.c
 | |
| 	echo '#include <stdio.h>'                                                                                                     >> build/$@.c
 | |
| 	echo '#include <stdlib.h>'                                                                                                    >> build/$@.c
 | |
| 	echo '#include <string.h>'                                                                                                    >> build/$@.c
 | |
| 	echo '#include "util.h"'                                                                                                      >> build/$@.c
 | |
| 	for f in $(SRC); do echo "int $$(echo "$${f%.c}" | sed s/-/_/g)_main(int, char **);"; done                                    >> build/$@.c
 | |
| 	echo 'int main(int argc, char *argv[]) { char *s = basename(argv[0]);'                                                        >> build/$@.c
 | |
| 	echo 'if(!strcmp(s,"sbase-box")) { argc--; argv++; s = basename(argv[0]); } if(0) ;'                                          >> build/$@.c
 | |
| 	echo "else if (!strcmp(s, \"install\")) return xinstall_main(argc, argv);"                                                    >> build/$@.c
 | |
| 	echo "else if (!strcmp(s, \"[\")) return test_main(argc, argv);"                                                              >> build/$@.c
 | |
| 	for f in $(SRC); do echo "else if(!strcmp(s, \"$${f%.c}\")) return $$(echo "$${f%.c}" | sed s/-/_/g)_main(argc, argv);"; done >> build/$@.c
 | |
| 	echo 'else { fputs("[ ", stdout);'                                                                                            >> build/$@.c
 | |
| 	for f in $(SRC); do echo "fputs(\"$${f%.c} \", stdout);"; done                                                                >> build/$@.c
 | |
| 	echo 'putchar(0xa); }; return 0; }'                                                                                           >> build/$@.c
 | |
| 	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -o $@ build/*.c $(LIB)
 | |
| 	rm -r build
 | |
| 
 | |
| sbase-box-install: sbase-box
 | |
| 	mkdir -p $(DESTDIR)$(PREFIX)/bin
 | |
| 	cp -f sbase-box $(DESTDIR)$(PREFIX)/bin
 | |
| 	chmod 755 $(DESTDIR)$(PREFIX)/bin/sbase-box
 | |
| 	for f in $(BIN); do ln -sf sbase-box $(DESTDIR)$(PREFIX)/bin/"$$f"; done
 | |
| 	ln -sf sbase-box $(DESTDIR)$(PREFIX)/bin/[
 | |
| 	mv -f $(DESTDIR)$(PREFIX)/bin/xinstall $(DESTDIR)$(PREFIX)/bin/install
 | |
| 	mkdir -p $(DESTDIR)$(MANPREFIX)/man1
 | |
| 	for m in $(MAN); do sed "s/^\.Os sbase/.Os sbase $(VERSION)/g" < "$$m" > $(DESTDIR)$(MANPREFIX)/man1/"$$m"; done
 | |
| 	cd $(DESTDIR)$(MANPREFIX)/man1 && chmod 644 $(MAN)
 | |
| 	mv -f $(DESTDIR)$(MANPREFIX)/man1/xinstall.1 $(DESTDIR)$(MANPREFIX)/man1/install.1
 | |
| 
 | |
| sbase-box-uninstall: uninstall
 | |
| 	cd $(DESTDIR)$(PREFIX)/bin && rm -f sbase-box
 | |
| 
 | |
| clean:
 | |
| 	rm -f $(BIN) $(OBJ) $(LIB) sbase-box sbase-$(VERSION).tar.gz
 | |
| 	rm -f getconf.h
 | |
| 
 | |
| .PHONY: all install uninstall dist sbase-box sbase-box-install sbase-box-uninstall clean
 |