diff options
-rw-r--r-- | .gitignore | 16 | ||||
-rw-r--r-- | LICENSE | 31 | ||||
-rw-r--r-- | Makefile | 350 | ||||
-rw-r--r-- | README | 3 | ||||
-rw-r--r-- | arg.h | 38 | ||||
-rw-r--r-- | bus-broadcast.1 (renamed from doc/man/bus-broadcast.1) | 13 | ||||
-rw-r--r-- | bus-chgrp.1 (renamed from doc/man/bus-chgrp.1) | 11 | ||||
-rw-r--r-- | bus-chmod.1 (renamed from doc/man/bus-chmod.1) | 11 | ||||
-rw-r--r-- | bus-chown.1 (renamed from doc/man/bus-chown.1) | 13 | ||||
-rw-r--r-- | bus-create.1 (renamed from doc/man/bus-create.1) | 13 | ||||
-rw-r--r-- | bus-listen.1 (renamed from doc/man/bus-listen.1) | 11 | ||||
-rw-r--r-- | bus-remove.1 (renamed from doc/man/bus-remove.1) | 11 | ||||
-rw-r--r-- | bus-wait.1 (renamed from doc/man/bus-wait.1) | 11 | ||||
-rw-r--r-- | bus.1 (renamed from doc/man/bus.1) | 10 | ||||
-rw-r--r-- | bus.5 (renamed from doc/man/bus.5) | 10 | ||||
-rw-r--r-- | bus.c (renamed from src/cmdline.c) | 158 | ||||
-rw-r--r-- | bus.h (renamed from src/bus.h) | 80 | ||||
-rw-r--r-- | bus.texinfo (renamed from doc/info/bus.texinfo) | 0 | ||||
-rw-r--r-- | bus_chmod.3 (renamed from doc/man/bus_chmod.3) | 10 | ||||
-rw-r--r-- | bus_chown.3 (renamed from doc/man/bus_chown.3) | 10 | ||||
-rw-r--r-- | bus_close.3 (renamed from doc/man/bus_close.3) | 10 | ||||
-rw-r--r-- | bus_create.3 (renamed from doc/man/bus_create.3) | 10 | ||||
-rw-r--r-- | bus_open.3 (renamed from doc/man/bus_open.3) | 10 | ||||
-rw-r--r-- | bus_poll.3 (renamed from doc/man/bus_poll.3) | 10 | ||||
-rw-r--r-- | bus_read.3 (renamed from doc/man/bus_read.3) | 10 | ||||
-rw-r--r-- | bus_unlink.3 (renamed from doc/man/bus_unlink.3) | 10 | ||||
-rw-r--r-- | bus_write.3 (renamed from doc/man/bus_write.3) | 10 | ||||
-rw-r--r-- | config.mk | 6 | ||||
-rw-r--r-- | dist/arch/stable/.gitignore | 6 | ||||
-rw-r--r-- | dist/arch/stable/PKGBUILD | 27 | ||||
-rw-r--r-- | dist/arch/stable/bus.install | 20 | ||||
-rw-r--r-- | doc/protocol | 1 | ||||
-rw-r--r-- | fdl.texinfo (renamed from doc/info/fdl.texinfo) | 0 | ||||
-rw-r--r-- | libbus.7 (renamed from doc/man/libbus.7) | 10 | ||||
-rw-r--r-- | libbus.c (renamed from src/bus.c) | 68 |
35 files changed, 280 insertions, 738 deletions
@@ -1,12 +1,14 @@ -_/ -obj/ -bin/ -\#*\# -.* -!.git* +*\#* *~ *.o *.out *.su *.gch - +*.so +*.a +*.lo +*.log +*.toc +*.aux +*.pdf +/bus @@ -1,22 +1,15 @@ -MIT/X Consortium License +ISC License -Copyright © 2015 Mattias Andrée <maandree@member.fsf.org> +© 2015, 2017 Mattias Andrée <maandree@kth.se> -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. @@ -1,272 +1,90 @@ -# bus - simple message broadcasting IPC system -# See LICENSE file for copyright and license details. - -PREFIX = /usr -BIN = /bin -BINDIR = ${PREFIX}${BIN} -LIB = /lib -LIBDIR = ${PREFIX}${LIB} -INCLUDE = /include -INCLUDEDIR = ${PREFIX}${INCLUDE} -DATA = /share -DATADIR = ${PREFIX}${DATA} -LICENSEDIR = ${DATADIR}/licenses -MANDIR = ${DATADIR}/man -INFODIR = $(DATADIR)/info -DOCDIR = $(DATADIR)/doc - -PKGNAME = bus - - -MAN1 = bus bus-broadcast bus-create bus-listen bus-remove bus-wait bus-chmod bus-chown bus-chgrp -MAN3 = bus_create bus_unlink bus_open bus_close bus_read bus_write bus_poll bus_chmod bus_chown -MAN5 = bus -MAN7 = libbus - -EXAMPLES = audio-volume-control daemon-dependencies nonblocking telephony-and-music timed -EXAMPLE_audio-volume-control = amixer cleanup init monitor README -EXAMPLE_daemon-dependencies = announce.c await-ready.c await-started.c cleanup.c d-network d-ntp \ - d-ssh init.c Makefile README require.c start-daemon.c test-daemon.c -EXAMPLE_nonblocking = cleanup.c init.c Makefile poll.c README write.c -EXAMPLE_telephony-and-music = cleanup.c end-call.c init.c Makefile monitor.c README receive-or-make-call.c -EXAMPLE_timed = cleanup.c init.c Makefile poll.c read.c README slow-poll.c write.c - - -FLAGS = -std=c99 -Wall -Wextra -pedantic -O2 - -LIB_MAJOR = 3 -LIB_MINOR = 1 -LIB_VERSION = ${LIB_MAJOR}.${LIB_MINOR} -VERSION = 3.1.6 - - - -default: bus man info -all: bus doc -doc: man info pdf dvi ps -man: man1 man3 man5 man7 -bus: bin lib -bin: bin/bus -lib: so a -so: bin/libbus.so.${LIB_VERSION} bin/libbus.so.${LIB_MAJOR} bin/libbus.so -a: bin/libbus.a -man1: $(foreach M,${MAN1},bin/${M}.1) -man3: $(foreach M,${MAN3},bin/${M}.3) -man5: $(foreach M,${MAN5},bin/${M}.5) -man7: $(foreach M,${MAN7},bin/${M}.7) -info: bin/bus.info -pdf: bin/bus.pdf -dvi: bin/bus.dvi -ps: bin/bus.ps - -bin/%.1: doc/man/%.1 - @echo SED $@ - @mkdir -p bin - @sed 's/%VERSION%/${VERSION}/g' < $< > $@ - -bin/%.3: doc/man/%.3 - @echo SED $@ - @mkdir -p bin - @sed 's/%VERSION%/${VERSION}/g' < $< > $@ - -bin/%.5: doc/man/%.5 - @echo SED $@ - @mkdir -p bin - @sed 's/%VERSION%/${VERSION}/g' < $< > $@ - -bin/%.7: doc/man/%.7 - @echo SED $@ - @mkdir -p bin - @sed 's/%VERSION%/${VERSION}/g' < $< > $@ - -bin/libbus.a: obj/bus-fpic.o - @echo AR $@ - @mkdir -p bin - @ar rcs $@ $^ - -bin/bus: obj/cmdline-nofpic.o obj/bus-nofpic.o - @echo CC -o $@ - @mkdir -p bin - @${CC} ${FLAGS} -lrt -o $@ $^ ${LDFLAGS} - -bin/libbus.so.${LIB_VERSION}: obj/bus-fpic.o - @echo CC -o $@ - @mkdir -p bin - @${CC} ${FLAGS} -lrt -shared -Wl,-soname,libbus.so.${LIB_MAJOR} -o $@ $^ ${LDFLAGS} - -bin/libbus.so.${LIB_MAJOR}: - @echo LN -s $@ - @mkdir -p bin - @ln -sf libbus.so.${LIB_VERSION} $@ - -bin/libbus.so: - @echo LN -s $@ - @mkdir -p bin - @ln -sf libbus.so.${LIB_VERSION} $@ - -obj/%-nofpic.o: src/%.c src/*.h - @echo CC -c $@ - @mkdir -p obj - @${CC} ${FLAGS} -c -o $@ ${CPPFLAGS} ${CFLAGS} $< - -obj/%-fpic.o: src/%.c src/*.h - @echo CC -c $@ - @mkdir -p obj - @${CC} ${FLAGS} -fPIC -c -o $@ ${CPPFLAGS} ${CFLAGS} $< - -bin/%.info: doc/info/%.texinfo - @echo MAKEINFO $@ - @mkdir -p bin - @$(MAKEINFO) $< - @mv $*.info $@ - -bin/%.pdf: doc/info/%.texinfo - @echo TEXI2PDF $@ - @! test -d obj/pdf || rm -rf obj/pdf - @mkdir -p bin obj/pdf - @cd obj/pdf && texi2pdf ../../"$<" < /dev/null - @mv obj/pdf/$*.pdf $@ - -bin/%.dvi: doc/info/%.texinfo - @echo TEXI2DVI $@ - @! test -d obj/dvi || rm -rf obj/dvi - @mkdir -p bin obj/dvi - @cd obj/dvi && $(TEXI2DVI) ../../"$<" < /dev/null - @mv obj/dvi/$*.dvi $@ - -bin/%.ps: doc/info/%.texinfo - @echo TEXI2PS $@ - @! test -d obj/ps || rm -rf obj/ps - @mkdir -p bin obj/ps - @cd obj/ps && texi2pdf --ps ../../"$<" < /dev/null - @mv obj/ps/$*.ps $@ - - - -install: install-bus install-man install-info install-examples -install-all: install-bus install-doc -install-lib: install-so install-a install-h -install-doc: install-man install-info install-pdf install-dvi install-ps install-examples -install-man: install-man1 install-man3 install-man5 install-man7 -install-bus: install-bin install-lib install-license - -install-bin: bin/bus - @echo INSTALL bus - @install -dm755 -- "${DESTDIR}${BINDIR}" - @install -m755 $^ -- "${DESTDIR}${BINDIR}" - -install-so: bin/libbus.so.${LIB_VERSION} - @echo INSTALL libbus.so - @install -dm755 -- "${DESTDIR}${LIBDIR}" - @install -m755 $^ -- "${DESTDIR}${LIBDIR}" - @ln -sf -- "libbus.so.${LIB_VERSION}" "${DESTDIR}${LIBDIR}/libbus.so.${LIB_MAJOR}" - @ln -sf -- "libbus.so.${LIB_VERSION}" "${DESTDIR}${LIBDIR}/libbus.so" - -install-a: bin/libbus.a - @echo INSTALL libbus.a - @install -dm755 -- "${DESTDIR}${LIBDIR}" - @install -m644 $^ -- "${DESTDIR}${LIBDIR}" - -install-h: - @echo INSTALL bus.h - @install -dm755 -- "${DESTDIR}${INCLUDEDIR}" - @install -m644 src/bus.h -- "${DESTDIR}${INCLUDEDIR}" - -install-license: - @echo INSTALL LICENSE - @install -dm755 -- "${DESTDIR}${LICENSEDIR}/${PKGNAME}" - @install -m644 LICENSE -- "${DESTDIR}${LICENSEDIR}/${PKGNAME}" - -install-man1: $(foreach M,${MAN1},bin/${M}.1) - @echo 'INSTALL *.1' - @install -dm755 -- "${DESTDIR}${MANDIR}/man1" - @install -m644 $^ -- "${DESTDIR}${MANDIR}/man1" - -install-man3: $(foreach M,${MAN3},bin/${M}.3) - @echo 'INSTALL *.3' - @install -dm755 -- "${DESTDIR}${MANDIR}/man3" - @install -m644 $^ -- "${DESTDIR}${MANDIR}/man3" - @ln -sf -- "bus_poll.3" "${DESTDIR}${MANDIR}/man3/bus_poll_start.3" - @ln -sf -- "bus_poll.3" "${DESTDIR}${MANDIR}/man3/bus_poll_stop.3" - @ln -sf -- "bus_poll.3" "${DESTDIR}${MANDIR}/man3/bus_poll_timed.3" - @ln -sf -- "bus_read.3" "${DESTDIR}${MANDIR}/man3/bus_read_timed.3" - @ln -sf -- "bus_write.3" "${DESTDIR}${MANDIR}/man3/bus_write_timed.3" - -install-man5: $(foreach M,${MAN5},bin/${M}.5) - @echo 'INSTALL *.5' - @install -dm755 -- "${DESTDIR}${MANDIR}/man5" - @install -m644 $^ -- "${DESTDIR}${MANDIR}/man5" - -install-man7: $(foreach M,${MAN7},bin/${M}.7) - @echo 'INSTALL *.7' - @install -dm755 -- "${DESTDIR}${MANDIR}/man7" - @install -m644 $^ -- "${DESTDIR}${MANDIR}/man7" - -install-info: bin/bus.info - @echo INSTALL bus.info - @install -dm755 -- "$(DESTDIR)$(INFODIR)" - @install -m644 $< -- "$(DESTDIR)$(INFODIR)/$(PKGNAME).info" - -install-pdf: bin/bus.pdf - @echo INSTALL bus.pdf - @install -dm755 -- "$(DESTDIR)$(DOCDIR)" - @install -m644 $< -- "$(DESTDIR)$(DOCDIR)/$(PKGNAME).pdf" - -install-dvi: bin/bus.dvi - @echo INSTALL bus.dvi - @install -dm755 -- "$(DESTDIR)$(DOCDIR)" - @install -m644 $< -- "$(DESTDIR)$(DOCDIR)/$(PKGNAME).dvi" - -install-ps: bin/bus.ps - @echo INSTALL bus.ps - @install -dm755 -- "$(DESTDIR)$(DOCDIR)" - @install -m644 $< -- "$(DESTDIR)$(DOCDIR)/$(PKGNAME).ps" - -install-examples: - @echo INSTALL examples - @install -dm755 -- $(foreach E,$(EXAMPLES),"$(DESTDIR)$(DOCDIR)/$(PKGNAME)/examples/$(E)") - @$(foreach E,$(EXAMPLES),cp -- $(foreach F,$(EXAMPLE_$(E)),doc/examples/$(E)/$(F)) \ - "$(DESTDIR)$(DOCDIR)/$(PKGNAME)/examples/$(E)" &&) true - - +.POSIX: + +CONFIGFILE = config.mk +include $(CONFIGFILE) + +LIB_MAJOR = 3 +LIB_MINOR = 1 +LIB_VERSION = $(LIB_MAJOR).$(LIB_MINOR) +VERSION = 3.1.7 + +MAN1 = bus.1 bus-broadcast.1 bus-create.1 bus-listen.1 bus-remove.1 bus-wait.1 bus-chmod.1 bus-chown.1 bus-chgrp.1 +MAN3 = bus_create.3 bus_unlink.3 bus_open.3 bus_close.3 bus_read.3 bus_write.3 bus_poll.3 bus_chmod.3 bus_chown.3 +MAN5 = bus.5 +MAN7 = libbus.7 + +LOBJ = libbus.lo +OBJ = bus.o libbus.o +HDR = bus.h arg.h + +all: bus libbus.a libbus.so + +$(OBJ): $(@:.o=.c) $(HDR) +$(LOBJ): $(@:.lo=.c) $(HDR) + +bus: $(OBJ) + $(CC) -o $@ $(OBJ) $(LDFLAGS) + +.o.a: + $(AR) $(ARFLAGS) $@ $< + +.c.lo: + $(CC) $(CFLAGS) -fPIC -c -o $@ $< + +.lo.so: + $(CC) -shared -Wl,-soname,$@.$(LIB_MAJOR) -o $@ $< $(LDFLAGS) + +bus.pdf: bus.texinfo fdl.texinfo + texi2pdf bus.texinfo < /dev/null + +install: bus libbus.a libbus.so + mkdir -p -- "$(DESTDIR)$(PREFIX)/bin" + mkdir -p -- "$(DESTDIR)$(PREFIX)/lib" + mkdir -p -- "$(DESTDIR)$(PREFIX)/include" + mkdir -p -- "$(DESTDIR)$(PREFIX)/licenses/bus" + mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man1" + mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man3" + mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man5" + mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man7" + cp -- bus "$(DESTDIR)$(PREFIX)/bin" + cp -- libbus.a "$(DESTDIR)$(PREFIX)/lib" + cp -- libbus.so "$(DESTDIR)$(PREFIX)/lib/libbus.so.$(LIB_VERSION)" + cp -- bus.h "$(DESTDIR)$(PREFIX)/include" + cp -- LICENSE "$(DESTDIR)$(PREFIX)/licenses/bus" + ln -sf -- libbus.so.$(LIB_VERSION) "$(DESTDIR)$(PREFIX)/lib/libbus.so.$(LIB_MAJOR)" + ln -sf -- libbus.so.$(LIB_VERSION) "$(DESTDIR)$(PREFIX)/lib/libbus.so" + cp -- $(MAN1) "$(DESTDIR)$(MANPREFIX)/man1" + cp -- $(MAN3) "$(DESTDIR)$(MANPREFIX)/man3" + cp -- $(MAN5) "$(DESTDIR)$(MANPREFIX)/man5" + cp -- $(MAN7) "$(DESTDIR)$(MANPREFIX)/man7" + ln -sf -- bus_poll.3 "$(DESTDIR)$(MANPREFIX)/man3/bus_poll_start.3" + ln -sf -- bus_poll.3 "$(DESTDIR)$(MANPREFIX)/man3/bus_poll_stop.3" + ln -sf -- bus_poll.3 "$(DESTDIR)$(MANPREFIX)/man3/bus_poll_timed.3" + ln -sf -- bus_read.3 "$(DESTDIR)$(MANPREFIX)/man3/bus_read_timed.3" + ln -sf -- bus_write.3 "$(DESTDIR)$(MANPREFIX)/man3/bus_write_timed.3" uninstall: - -rm -- "${DESTDIR}${BINDIR}/bus" - -rm -- "${DESTDIR}${LIBDIR}/libbus.so.${LIB_VERSION}" - -rm -- "${DESTDIR}${LIBDIR}/libbus.so.${LIB_MAJOR}" - -rm -- "${DESTDIR}${LIBDIR}/libbus.so" - -rm -- "${DESTDIR}${LIBDIR}/libbus.a" - -rm -- "${DESTDIR}${INCLUDEDIR}/bus.h" - -rm -- "${DESTDIR}${LICENSEDIR}/${PKGNAME}/LICENSE" - -rmdir -- "${DESTDIR}${LICENSEDIR}/${PKGNAME}" - -rm -- $(foreach M,${MAN1},"${DESTDIR}${MANDIR}/man1/${M}.1") - -rm -- $(foreach M,${MAN3},"${DESTDIR}${MANDIR}/man3/${M}.3") - -rm -- "${DESTDIR}${MANDIR}/man3/bus_poll_start.3" - -rm -- "${DESTDIR}${MANDIR}/man3/bus_poll_stop.3" - -rm -- "${DESTDIR}${MANDIR}/man3/bus_poll_timed.3" - -rm -- "${DESTDIR}${MANDIR}/man3/bus_read_timed.3" - -rm -- "${DESTDIR}${MANDIR}/man3/bus_write_timed.3" - -rm -- $(foreach M,${MAN5},"${DESTDIR}${MANDIR}/man5/${M}.5") - -rm -- $(foreach M,${MAN7},"${DESTDIR}${MANDIR}/man7/${M}.7") - -rm -- "$(DESTDIR)$(INFODIR)/$(PKGNAME).info" - -rm -- "$(DESTDIR)$(DOCDIR)/$(PKGNAME).pdf" - -rm -- "$(DESTDIR)$(DOCDIR)/$(PKGNAME).dvi" - -rm -- "$(DESTDIR)$(DOCDIR)/$(PKGNAME).ps" - -$(foreach E,$(EXAMPLES),rm -- \ - $(foreach F,$(EXAMPLE_$(E)),"$(DESTDIR)$(DOCDIR)/$(PKGNAME)/examples/$(E)/$(F)");) - -rmdir -- $(foreach E,$(EXAMPLES),"$(DESTDIR)$(DOCDIR)/$(PKGNAME)/examples/$(E)") - - + -rm -f -- "$(DESTDIR)$(PREFIX)/bin/bus" + -rm -f -- "$(DESTDIR)$(PREFIX)/lib/libbus.a" + -rm -f -- "$(DESTDIR)$(PREFIX)/lib/libbus.so.$(LIB_VERSION)" + -rm -f -- "$(DESTDIR)$(PREFIX)/lib/libbus.so.$(LIB_MAJOR)" + -rm -f -- "$(DESTDIR)$(PREFIX)/lib/libbus.so" + -rm -f -- "$(DESTDIR)$(PREFIX)/include/bus.h" + -rm -rf -- "$(DESTDIR)$(PREFIX)/licenses/bus" + -cd "$(DESTDIR)$(MANPREFIX)/man1" && rm -f -- $(MAN1) + -cd "$(DESTDIR)$(MANPREFIX)/man3" && rm -f -- $(MAN3) + -cd "$(DESTDIR)$(MANPREFIX)/man5" && rm -f -- $(MAN5) + -cd "$(DESTDIR)$(MANPREFIX)/man7" && rm -f -- $(MAN7) + -rm -f -- "$(DESTDIR)$(MANPREFIX)/man3/bus_poll_start.3" + -rm -f -- "$(DESTDIR)$(MANPREFIX)/man3/bus_poll_stop.3" + -rm -f -- "$(DESTDIR)$(MANPREFIX)/man3/bus_poll_timed.3" + -rm -f -- "$(DESTDIR)$(MANPREFIX)/man3/bus_read_timed.3" + -rm -f -- "$(DESTDIR)$(MANPREFIX)/man3/bus_write_timed.3" clean: - @echo cleaning - @-rm -rf obj bin - - + -rm -f -- bus *.o *.lo *.a *.so *.log *.toc *.aux *.pdf -.PHONY: default all doc bin bus lib so a man man1 man3 man5 man7 info pdf dvi \ - ps install install-all install-doc install-man install-bin install-so \ - install-a install-h install-lib install-license install-man1 install-bus \ - install-man3 install-man5 install-man7 install-info install-pdf install-dvi \ - install-ps install-examples uninstall clean +.SUFFIXES: +.SUFFIXES: .so .a .o .lo .c .pdf +.PHONY: all install uninstall clean @@ -39,6 +39,3 @@ SEE ALSO pthread_spin_destroy(3), pthread_cond_destroy(3), lockf(3), flock(2), fcntl(3), ioctl(3), mkfifo(3), rendezvous(2), 9p(2), libdoor(3), python-bus - - Full documentation available locally via: info '(bus)' - @@ -0,0 +1,38 @@ +/* + * Copy me if you can. + * by 20h + */ + +#ifndef ARG_H__ +#define ARG_H__ + +extern char *argv0; + +/* use main(int argc, char *argv[]) */ +#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\ + argv[0] && argv[0][0] && argv[0][1];\ + argc--, argv++) {\ + char argc_;\ + char **argv_;\ + int brk_;\ + if (argv[0][0] == '-') {\ + if (argv[0][1] == '-' && argv[0][2] == '\0') {\ + argv++;\ + argc--;\ + break;\ + }\ + for (brk_ = 0, argv[0]++, argv_ = argv;\ + argv[0][0] && !brk_;\ + argv[0]++) {\ + if (argv_ != argv)\ + break;\ + argc_ = argv[0][0];\ + switch (argc_) + +#define ARGEND }\ + } else {\ + break;\ + }\ + } + +#endif diff --git a/doc/man/bus-broadcast.1 b/bus-broadcast.1 index a4dc76c..94a05ec 100644 --- a/doc/man/bus-broadcast.1 +++ b/bus-broadcast.1 @@ -1,10 +1,9 @@ -.TH BUS-BROADCAST 1 BUS-%VERSION% +.TH BUS-BROADCAST 1 BUS .SH NAME bus broadcast - Broadcast a message on a bus .SH SYNOPSIS .B bus broadcast -.IR [options] -[--] +[-n] .IR pathname .IR message .SH DESCRIPTION @@ -25,11 +24,3 @@ The command failed. The command is not recognised. .SH SEE ALSO .BR bus (5) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus-chgrp.1 b/bus-chgrp.1 index d825e32..b871c41 100644 --- a/doc/man/bus-chgrp.1 +++ b/bus-chgrp.1 @@ -1,9 +1,8 @@ -.TH BUS-CHGRP 1 BUS-%VERSION% +.TH BUS-CHGRP 1 BUS .SH NAME bus chgrp - Change group ownership of a bus .SH SYNOPSIS .B bus chgrp -[--] .IR group .IR pathname .SH DESCRIPTION @@ -28,11 +27,3 @@ The command is not recognised. .BR bus-chown (1), .BR bus-chmod (1), .BR stat (1) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus-chmod.1 b/bus-chmod.1 index 3a44423..51ee9b4 100644 --- a/doc/man/bus-chmod.1 +++ b/bus-chmod.1 @@ -1,9 +1,8 @@ -.TH BUS-CHMOD 1 BUS-%VERSION% +.TH BUS-CHMOD 1 BUS .SH NAME bus chmod - Change permissions on a bus .SH SYNOPSIS .B bus chmod -[--] .IR permissions .IR pathname .SH DESCRIPTION @@ -39,11 +38,3 @@ The command is not recognised. .BR bus-chown (1), .BR bus-chgrp (1), .BR stat (1) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus-chown.1 b/bus-chown.1 index 24487a1..c6d9056 100644 --- a/doc/man/bus-chown.1 +++ b/bus-chown.1 @@ -1,10 +1,9 @@ -.TH BUS-CHOWN 1 BUS-%VERSION% +.TH BUS-CHOWN 1 BUS .SH NAME bus chown - Change ownership of a bus .SH SYNOPSIS .B bus chown -[--] -.IR owner[:group] +.IR owner [\fB:\fP group ] .IR pathname .SH DESCRIPTION Change the owner, that owns a bus with an associated \fIpathname\fP, @@ -31,11 +30,3 @@ The command is not recognised. .BR bus-chgrp (1), .BR bus-chmod (1), .BR stat (1) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus-create.1 b/bus-create.1 index 91041cf..2d34b83 100644 --- a/doc/man/bus-create.1 +++ b/bus-create.1 @@ -1,10 +1,9 @@ -.TH BUS-CREATE 1 BUS-%VERSION% +.TH BUS-CREATE 1 BUS .SH NAME bus create - Create a bus .SH SYNOPSIS .B bus create -.IR [options] -[--] +[-x] .IR [pathname] .SH DESCRIPTION Create a bus with an associated \fIpathname\fP. If \fIpathname\fP @@ -27,11 +26,3 @@ The command is not recognised. .SH SEE ALSO .BR bus (5), .BR bus-remove (1) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus-listen.1 b/bus-listen.1 index 4977ce5..75a6106 100644 --- a/doc/man/bus-listen.1 +++ b/bus-listen.1 @@ -1,9 +1,8 @@ -.TH BUS-LISTEN 1 BUS-%VERSION% +.TH BUS-LISTEN 1 BUS .SH NAME bus listen - Listen for new messages on a bus .SH SYNOPSIS .B bus listen -[--] .IR pathname .IR command .SH DESCRIPTION @@ -22,11 +21,3 @@ The command failed. The command is not recognised. .SH SEE ALSO .BR bus (5) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus-remove.1 b/bus-remove.1 index 95e805c..5905270 100644 --- a/doc/man/bus-remove.1 +++ b/bus-remove.1 @@ -1,9 +1,8 @@ -.TH BUS-REMOVE 1 BUS-%VERSION% +.TH BUS-REMOVE 1 BUS .SH NAME bus remove - Remove a bus .SH SYNOPSIS .B bus remove -[--] .IR pathname .SH DESCRIPTION Remove the bus associated with \fIpathname\fP. @@ -19,11 +18,3 @@ The command failed. The command is not recognised. .SH SEE ALSO .BR bus (5) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus-wait.1 b/bus-wait.1 index 4231cd0..07d5704 100644 --- a/doc/man/bus-wait.1 +++ b/bus-wait.1 @@ -1,9 +1,8 @@ -.TH BUS-WAIT 1 BUS-%VERSION% +.TH BUS-WAIT 1 BUS .SH NAME bus wait - Listen for a new message on a bus .SH SYNOPSIS .B bus wait -[--] .IR pathname .IR command .SH DESCRIPTION @@ -23,11 +22,3 @@ The command failed. The command is not recognised. .SH SEE ALSO .BR bus (5) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org @@ -1,4 +1,4 @@ -.TH BUS 1 BUS-%VERSION% +.TH BUS 1 BUS .SH NAME bus - A simple daemonless system for broadcasting messages locally .SH SYNOPSIS @@ -67,11 +67,3 @@ The command is not recognised. .BR bus-chgrp (1), .BR bus (5), .BR libbus (7) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org @@ -1,4 +1,4 @@ -.TH BUS 5 BUS-%VERSION% +.TH BUS 5 BUS .SH NAME bus - A simple daemonless system for broadcasting messages locally .SH DESCRIPTION @@ -40,11 +40,3 @@ whence the message originated, followed by a single regular space. .BR libbus (7), .BR semop (2), .BR shmop (2) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org @@ -1,44 +1,24 @@ -/** - * MIT/X Consortium License - * - * Copyright © 2015 Mattias Andrée <maandree@member.fsf.org> - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ +/* See LICENSE file for copyright and license details. */ #include "bus.h" -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <string.h> -#include <errno.h> -#include <sys/types.h> #include <sys/stat.h> +#include <sys/types.h> +#include <errno.h> #include <grp.h> #include <pwd.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "arg.h" /** * Statement wrapper that goes to `fail` on failure */ -#define t(inst) if ((inst) == -1) goto fail +#define t(inst) do { if ((inst) == -1) goto fail; } while (0) @@ -111,9 +91,9 @@ spawn_break(const char *message, void *user_data) static int parse_mode(const char *str, mode_t *andnot, mode_t *or) { -#define U S_IRWXU -#define G S_IRWXG -#define O S_IRWXO +#define U S_IRWXU +#define G S_IRWXG +#define O S_IRWXO const char *s = str; int numerical = 1; mode_t mode = 0; @@ -306,114 +286,91 @@ parse_owner(char *str, uid_t *uid, gid_t *gid) int main(int argc, char *argv[]) { + int xflag = 0; + int nflag = 0; bus_t bus; char *file; struct stat attr; uid_t uid; gid_t gid; mode_t mode_andnot, mode_or; - int opt_x = 0, opt_n = 0; - const char *arg; - char **nonoptv = alloca((size_t)argc * sizeof(char*)); - int nonoptc = 0; - - argv0 = *argv++; - argc--; /* Parse arguments. */ - while (argc) { - if (!strcmp(*argv, "--")) { - argv++; - argc--; - break; - } else if (**argv == '-') { - arg = *argv++; - argc--; - for (arg++; *arg; arg++) { - if (*arg == 'x') - opt_x = 1; - else if (*arg == 'n') - opt_n = 1; - else - return -2; - } - } else { - *nonoptv++ = *argv++; - nonoptc++; - argc--; - } - } - while (argc) { - *nonoptv++ = *argv++; - nonoptc++; - argc--; - } - nonoptv -= nonoptc; + ARGBEGIN { + case 'x': + xflag = 1; + break; + case 'n': + nflag = 1; + break; + default: + return 2; + } ARGEND; /* Check options. */ - if (opt_x && strcmp(nonoptv[0], "create") && (nonoptc != 2)) + if (xflag && strcmp(argv[0], "create") && (argc != 2)) return 2; - if (opt_n && strcmp(nonoptv[0], "broadcast") && (nonoptc != 3)) + if (nflag && strcmp(argv[0], "broadcast") && (argc != 3)) return 2; /* Create a new bus with selected name. */ - if ((nonoptc == 2) && !strcmp(nonoptv[0], "create")) { - t(bus_create(nonoptv[1], opt_x * BUS_EXCL, NULL)); + if ((argc == 2) && !strcmp(argv[0], "create")) { + t(bus_create(argv[1], xflag * BUS_EXCL, NULL)); /* Create a new bus with random name. */ - } else if ((nonoptc == 1) && !strcmp(nonoptv[0], "create")) { + } else if ((argc == 1) && !strcmp(argv[0], "create")) { t(bus_create(NULL, 0, &file)); printf("%s\n", file); free(file); /* Remove a bus. */ - } else if ((nonoptc == 2) && !strcmp(nonoptv[0], "remove")) { - t(bus_unlink(nonoptv[1])); + } else if ((argc == 2) && !strcmp(argv[0], "remove")) { + t(bus_unlink(argv[1])); /* Listen on a bus in a loop. */ - } else if ((nonoptc == 3) && !strcmp(nonoptv[0], "listen")) { - command = nonoptv[2]; - t(bus_open(&bus, nonoptv[1], BUS_RDONLY)); + } else if ((argc == 3) && !strcmp(argv[0], "listen")) { + command = argv[2]; + t(bus_open(&bus, argv[1], BUS_RDONLY)); t(bus_read(&bus, spawn_continue, NULL)); t(bus_close(&bus)); /* Listen on a bus for one message. */ - } else if ((nonoptc == 3) && !strcmp(nonoptv[0], "wait")) { - command = nonoptv[2]; - t(bus_open(&bus, nonoptv[1], BUS_RDONLY)); + } else if ((argc == 3) && !strcmp(argv[0], "wait")) { + command = argv[2]; + t(bus_open(&bus, argv[1], BUS_RDONLY)); t(bus_read(&bus, spawn_break, NULL)); t(bus_close(&bus)); /* Broadcast a message on a bus. */ - } else if ((nonoptc == 3) && !strcmp(nonoptv[0], "broadcast")) { - t(bus_open(&bus, nonoptv[1], BUS_WRONLY)); - t(bus_write(&bus, nonoptv[2], opt_n * BUS_NOWAIT)); + } else if ((argc == 3) && !strcmp(argv[0], "broadcast")) { + t(bus_open(&bus, argv[1], BUS_WRONLY)); + t(bus_write(&bus, argv[2], nflag * BUS_NOWAIT)); t(bus_close(&bus)); /* Change permissions. */ - } else if ((nonoptc == 3) && !strcmp(nonoptv[0], "chmod")) { - t(parse_mode(nonoptv[1], &mode_andnot, &mode_or)); - t(stat(nonoptv[2], &attr)); + } else if ((argc == 3) && !strcmp(argv[0], "chmod")) { + t(parse_mode(argv[1], &mode_andnot, &mode_or)); + t(stat(argv[2], &attr)); attr.st_mode &= ~mode_andnot; attr.st_mode |= mode_or; - t(bus_chmod(nonoptv[2], attr.st_mode)); + t(bus_chmod(argv[2], attr.st_mode)); /* Change ownership. */ - } else if ((nonoptc == 3) && !strcmp(nonoptv[0], "chown")) { - if (strchr(nonoptv[1], ':')) { - t(parse_owner(nonoptv[1], &uid, &gid)); - t(bus_chown(nonoptv[2], uid, gid)); + } else if ((argc == 3) && !strcmp(argv[0], "chown")) { + if (strchr(argv[1], ':')) { + t(parse_owner(argv[1], &uid, &gid)); + t(bus_chown(argv[2], uid, gid)); } else { - t(parse_owner(nonoptv[1], &uid, NULL)); - t(stat(nonoptv[2], &attr)); - t(bus_chown(nonoptv[2], uid, attr.st_gid)); + t(parse_owner(argv[1], &uid, NULL)); + t(stat(argv[2], &attr)); + t(bus_chown(argv[2], uid, attr.st_gid)); } /* Change group. */ - } else if ((nonoptc == 3) && !strcmp(nonoptv[0], "chgrp")) { - t(parse_owner(nonoptv[1], NULL, &gid)); - t(stat(nonoptv[2], &attr)); - t(bus_chown(nonoptv[2], attr.st_uid, gid)); + } else if ((argc == 3) && !strcmp(argv[0], "chgrp")) { + t(parse_owner(argv[1], NULL, &gid)); + t(stat(argv[2], &attr)); + t(bus_chown(argv[2], attr.st_uid, gid)); } else return 2; @@ -421,9 +378,8 @@ main(int argc, char *argv[]) return 0; fail: - if (errno == 0) + if (!errno) return 2; perror(argv0); return 1; } - @@ -1,26 +1,4 @@ -/** - * MIT/X Consortium License - * - * Copyright © 2015 Mattias Andrée <maandree@member.fsf.org> - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ +/* See LICENSE file for copyright and license details. */ #ifndef BUS_H #define BUS_H @@ -130,8 +108,8 @@ typedef struct bus * @param out_file Output parameter for the pathname of the bus * @return 0 on success, -1 on error */ -int bus_create(const char *restrict, int, char **restrict) - BUS_COMPILER_GCC(__attribute__((__warn_unused_result__))); +BUS_COMPILER_GCC(__attribute__((__warn_unused_result__))) +int bus_create(const char *restrict, int, char **restrict); /** * Remove a bus @@ -139,8 +117,8 @@ int bus_create(const char *restrict, int, char **restrict) * @param file The pathname of the bus * @return 0 on success, -1 on error */ -int bus_unlink(const char *) - BUS_COMPILER_GCC(__attribute__((__nonnull__))); +BUS_COMPILER_GCC(__attribute__((__nonnull__))) +int bus_unlink(const char *); /** @@ -152,8 +130,8 @@ int bus_unlink(const char *) * the value must not be negative * @return 0 on success, -1 on error */ -int bus_open(bus_t *restrict, const char *restrict, int) - BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))); +BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))) +int bus_open(bus_t *restrict, const char *restrict, int); /** * Close a bus @@ -161,8 +139,8 @@ int bus_open(bus_t *restrict, const char *restrict, int) * @param bus Bus information * @return 0 on success, -1 on error */ -int bus_close(bus_t *) - BUS_COMPILER_GCC(__attribute__((__nonnull__))); +BUS_COMPILER_GCC(__attribute__((__nonnull__))) +int bus_close(bus_t *); /** @@ -176,8 +154,8 @@ int bus_close(bus_t *) * procedure * @return 0 on success, -1 on error */ -int bus_write(const bus_t *, const char *, int) - BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))); +BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))) +int bus_write(const bus_t *, const char *, int); /** * Broadcast a message on a bus @@ -191,8 +169,8 @@ int bus_write(const bus_t *, const char *, int) * it most be a predictable clock * @return 0 on success, -1 on error */ -int bus_write_timed(const bus_t *, const char *, const struct timespec *, clockid_t) - BUS_COMPILER_GCC(__attribute__((__nonnull__(1, 2), __warn_unused_result__))); +BUS_COMPILER_GCC(__attribute__((__nonnull__(1, 2), __warn_unused_result__))) +int bus_write_timed(const bus_t *, const char *, const struct timespec *, clockid_t); /** @@ -218,8 +196,8 @@ int bus_write_timed(const bus_t *, const char *, const struct timespec *, clocki * @param user_data Parameter passed to `callback` * @return 0 on success, -1 on error */ -int bus_read(const bus_t *restrict, int (*)(const char *, void *), void *) - BUS_COMPILER_GCC(__attribute__((__nonnull__(1, 2), __warn_unused_result__))); +BUS_COMPILER_GCC(__attribute__((__nonnull__(1, 2), __warn_unused_result__))) +int bus_read(const bus_t *restrict, int (*)(const char *, void *), void *); /** * Listen (in a loop, forever) for new message on a bus @@ -249,9 +227,9 @@ int bus_read(const bus_t *restrict, int (*)(const char *, void *), void *) * it most be a predictable clock * @return 0 on success, -1 on error */ +BUS_COMPILER_GCC(__attribute__((__nonnull__(1, 2), __warn_unused_result__))) int bus_read_timed(const bus_t *restrict, int (*)(const char *, void *), - void *, const struct timespec *, clockid_t) - BUS_COMPILER_GCC(__attribute__((__nonnull__(1, 2), __warn_unused_result__))); + void *, const struct timespec *, clockid_t); /** @@ -265,8 +243,8 @@ int bus_read_timed(const bus_t *restrict, int (*)(const char *, void *), * @param bus Bus information * @return 0 on success, -1 on error */ -int bus_poll_start(bus_t *) - BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))); +BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))) +int bus_poll_start(bus_t *); /** * Announce that the thread has stopped listening on the bus. @@ -276,8 +254,8 @@ int bus_poll_start(bus_t *) * @param bus Bus information * @return 0 on success, -1 on error */ -int bus_poll_stop(const bus_t *) - BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))); +BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))) +int bus_poll_stop(const bus_t *); /** * Wait for a message to be broadcasted on the bus. @@ -292,8 +270,8 @@ int bus_poll_stop(const bus_t *) * `EAGAIN` if there isn't already a message available on the bus * @return The received message, `NULL` on error */ -const char *bus_poll(bus_t *, int) - BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))); +BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))) +const char *bus_poll(bus_t *, int); /** * Wait for a message to be broadcasted on the bus. @@ -310,8 +288,8 @@ const char *bus_poll(bus_t *, int) * it most be a predictable clock * @return The received message, `NULL` on error */ -const char *bus_poll_timed(bus_t *, const struct timespec *, clockid_t) - BUS_COMPILER_GCC(__attribute__((__nonnull__(1), __warn_unused_result__))); +BUS_COMPILER_GCC(__attribute__((__nonnull__(1), __warn_unused_result__))) +const char *bus_poll_timed(bus_t *, const struct timespec *, clockid_t); /** @@ -324,8 +302,8 @@ const char *bus_poll_timed(bus_t *, const struct timespec *, clockid_t) * @param group The group ID of the bus's new group * @return 0 on success, -1 on error */ -int bus_chown(const char *, uid_t, gid_t) - BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))); +BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))) +int bus_chown(const char *, uid_t, gid_t); /** * Change the permissions for a bus @@ -338,8 +316,8 @@ int bus_chown(const char *, uid_t, gid_t) * edit the bus's associated file * @return 0 on success, -1 on error */ -int bus_chmod(const char *, mode_t) - BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))); +BUS_COMPILER_GCC(__attribute__((__nonnull__, __warn_unused_result__))) +int bus_chmod(const char *, mode_t); diff --git a/doc/info/bus.texinfo b/bus.texinfo index be50cea..be50cea 100644 --- a/doc/info/bus.texinfo +++ b/bus.texinfo diff --git a/doc/man/bus_chmod.3 b/bus_chmod.3 index c2ac3f9..ab8cb14 100644 --- a/doc/man/bus_chmod.3 +++ b/bus_chmod.3 @@ -1,4 +1,4 @@ -.TH BUS_CHMOD 3 BUS-%VERSION% +.TH BUS_CHMOD 3 BUS .SH NAME bus_chmod - Change bus mode bits .SH SYNOPSIS @@ -54,11 +54,3 @@ as well as any errors specified for the \fIIPC_STAT\fP and .BR bus_open (3), .BR bus_read (3), .BR stat (3) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus_chown.3 b/bus_chown.3 index c047d83..d90b131 100644 --- a/doc/man/bus_chown.3 +++ b/bus_chown.3 @@ -1,4 +1,4 @@ -.TH BUS_CHOWN 3 BUS-%VERSION% +.TH BUS_CHOWN 3 BUS .SH NAME bus_chown - Change bus owner and group .SH SYNOPSIS @@ -41,11 +41,3 @@ as well as any errors specified for the \fIIPC_STAT\fP and .BR bus_open (3), .BR bus_read (3), .BR stat (3) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus_close.3 b/bus_close.3 index dc35e6b..13fe22a 100644 --- a/doc/man/bus_close.3 +++ b/bus_close.3 @@ -1,4 +1,4 @@ -.TH BUS_CLOSE 3 BUS-%VERSION% +.TH BUS_CLOSE 3 BUS .SH NAME bus_close - Close a bus .SH SYNOPSIS @@ -26,11 +26,3 @@ The bus does not exist. .BR libbus (7), .BR bus_open (3), .BR bus_unlink (3) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus_create.3 b/bus_create.3 index 88e6efe..8552b95 100644 --- a/doc/man/bus_create.3 +++ b/bus_create.3 @@ -1,4 +1,4 @@ -.TH BUS_CREATE 3 BUS-%VERSION% +.TH BUS_CREATE 3 BUS .SH NAME bus_create - Create a new bus .SH SYNOPSIS @@ -53,11 +53,3 @@ and .BR bus_open (3), .BR open (2), .BR write (2) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus_open.3 b/bus_open.3 index 683ae9b..35abb27 100644 --- a/doc/man/bus_open.3 +++ b/bus_open.3 @@ -1,4 +1,4 @@ -.TH BUS_OPEN 3 BUS-%VERSION% +.TH BUS_OPEN 3 BUS .SH NAME bus_open - Open a bus .SH SYNOPSIS @@ -57,11 +57,3 @@ specified for the routine .BR bus_read (3), .BR bus_poll (3), .BR open (2) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus_poll.3 b/bus_poll.3 index 95271ca..f916237 100644 --- a/doc/man/bus_poll.3 +++ b/bus_poll.3 @@ -1,4 +1,4 @@ -.TH BUS_POLL 3 BUS-%VERSION% +.TH BUS_POLL 3 BUS .SH NAME bus_poll_start, bus_poll_stop, bus_poll, bus_poll_timed - Wait a message to be broadcasted .SH SYNOPSIS @@ -77,11 +77,3 @@ function may also set \fIerrno\fP to any of the errors specified for .BR bus_read (3), .BR semop (3), .BR clock_gettime (3) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus_read.3 b/bus_read.3 index 1caadfb..36fd4c9 100644 --- a/doc/man/bus_read.3 +++ b/bus_read.3 @@ -1,4 +1,4 @@ -.TH BUS_READ 3 BUS-%VERSION% +.TH BUS_READ 3 BUS .SH NAME bus_read, bus_read_timed - Listen for new messages a bus .SH SYNOPSIS @@ -69,11 +69,3 @@ function may also set \fIerrno\fP to any of the errors specified for .BR bus_poll (3), .BR semop (3), .BR clock_gettime (3) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus_unlink.3 b/bus_unlink.3 index 83ec760..bd1891a 100644 --- a/doc/man/bus_unlink.3 +++ b/bus_unlink.3 @@ -1,4 +1,4 @@ -.TH BUS_UNLINK 3 BUS-%VERSION% +.TH BUS_UNLINK 3 BUS .SH NAME bus_unlink - Remove a bus .SH SYNOPSIS @@ -46,11 +46,3 @@ and .BR open (2), .BR semget (3), .BR shmget (3) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/doc/man/bus_write.3 b/bus_write.3 index 4513c29..833396e 100644 --- a/doc/man/bus_write.3 +++ b/bus_write.3 @@ -1,4 +1,4 @@ -.TH BUS_WRITE 3 BUS-%VERSION% +.TH BUS_WRITE 3 BUS .SH NAME bus_write, bus_write_timed - Broadcast a message a bus .SH SYNOPSIS @@ -54,11 +54,3 @@ function may also set \fIerrno\fP to any of the errors specified for .BR bus_chown (3), .BR bus_chmod (3), .BR clock_gettime (3) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..6f9acdb --- /dev/null +++ b/config.mk @@ -0,0 +1,6 @@ +PREFIX = /usr/local +MANPREFIX = $(PREFIX)/share/man + +CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_GNU_SOURCE +CFLAGS = -std=c99 -Wall -Wextra -pedantic -O2 $(CPPFLAGS) +LDFLAGS = -s -lrt diff --git a/dist/arch/stable/.gitignore b/dist/arch/stable/.gitignore deleted file mode 100644 index ccea0b1..0000000 --- a/dist/arch/stable/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -* -!/.git* -*~ -!/PKGBUILD -!/bus.install - diff --git a/dist/arch/stable/PKGBUILD b/dist/arch/stable/PKGBUILD deleted file mode 100644 index 1cfedf5..0000000 --- a/dist/arch/stable/PKGBUILD +++ /dev/null @@ -1,27 +0,0 @@ -# Maintainer: Mattias Andrée <`base64 -d`(bWFhbmRyZWUK)@member.fsf.org> - -pkgname=bus -pkgver=3.1.6 -pkgrel=2 -pkgdesc="A simple daemonless system for broadcasting messages locally" -arch=(i686 x86_64) -url="https://github.com/maandree/bus" -license=('MIT') -depends=() -makedepends=() -install=bus.install -source=($url/archive/$pkgver.tar.gz) -sha256sums=(79683d48e8bcea44a564510b27d438ebf46a1080e8d51c6d2eeae324b87b087a) - - -build() { - cd "$srcdir/$pkgname-$pkgver" - make PREFIX=/usr -} - - -package() { - cd "$srcdir/$pkgname-$pkgver" - make PREFIX=/usr install DESTDIR="$pkgdir" -} - diff --git a/dist/arch/stable/bus.install b/dist/arch/stable/bus.install deleted file mode 100644 index 6b67f03..0000000 --- a/dist/arch/stable/bus.install +++ /dev/null @@ -1,20 +0,0 @@ -_file="bus" - -infodir="usr/share/info" -file="${_file}.info" - - -post_install() { - [[ -x "usr/bin/install-info" ]] || return 0 - install-info -- "${infodir}/${file}" "${infodir}/dir" 2> /dev/null -} - -post_upgrade() { - post_install "$1" -} - -pre_remove() { - [[ -x "usr/bin/install-info" ]] || return 0 - install-info --delete -- "${infodir}/${file}" "${infodir}/dir" 2> /dev/null -} - diff --git a/doc/protocol b/doc/protocol index f45799e..116c1b2 100644 --- a/doc/protocol +++ b/doc/protocol @@ -45,4 +45,3 @@ and `V(a)` is done when exiting the scope. It also means that these actions [P(a) and V(a)] are undone when the process exits, or if the call fails. `with V(a)` is to `V(a)` as `with P(a)` is to `P(a)`. - diff --git a/doc/info/fdl.texinfo b/fdl.texinfo index cb71f05..cb71f05 100644 --- a/doc/info/fdl.texinfo +++ b/fdl.texinfo diff --git a/doc/man/libbus.7 b/libbus.7 index 804ee97..3565b50 100644 --- a/doc/man/libbus.7 +++ b/libbus.7 @@ -1,4 +1,4 @@ -.TH LIBBUS 7 BUS-%VERSION% +.TH LIBBUS 7 BUS .SH NAME libbus - A simple daemonless system for broadcasting messages locally .SH DESCRIPTION @@ -29,11 +29,3 @@ None. .BR bus_poll_timed (3), .BR bus_chown (3), .BR bus_chmod (3) -.SH AUTHORS -Principal author, Mattias Andrée. See the LICENSE file for the full -list of authors. -.SH LICENSE -MIT/X Consortium License. -.SH BUGS -Please report bugs to https://github.com/maandree/bus/issues or to -maandree@member.fsf.org @@ -1,45 +1,19 @@ -/** - * MIT/X Consortium License - * - * Copyright © 2015 Mattias Andrée <maandree@member.fsf.org> - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ -#define _XOPEN_SOURCE 700 -#define _GNU_SOURCE +/* See LICENSE file for copyright and license details. */ #include "bus.h" -#include <stdlib.h> -#include <stdio.h> -#include <time.h> -#include <errno.h> -#include <string.h> -#include <unistd.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <time.h> - #include <sys/ipc.h> #include <sys/sem.h> #include <sys/shm.h> - +#include <sys/stat.h> +#include <sys/types.h> +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <time.h> +#include <unistd.h> #ifdef BUS_SEMAPHORES_ARE_SYNCHRONOUS_ME_EVEN_HARDER @@ -54,7 +28,6 @@ #endif - /** * Semaphore used to signal `bus_write` that `bus_read` is ready */ @@ -79,14 +52,14 @@ /** * Semaphore used to notify `bus_read` that it may restore `S` */ -#define N 4 +# define N 4 /** * The number of semaphores in the semaphore array */ -#define BUS_SEMAPHORES 5 +# define BUS_SEMAPHORES 5 #else -#define BUS_SEMAPHORES 4 +# define BUS_SEMAPHORES 4 #endif /** @@ -197,8 +170,12 @@ */ #define DELTA \ do { \ - if (absolute_time_to_delta_time(&delta, timeout, clockid) < 0) goto fail; \ - else if ((delta.tv_sec < 0) || (delta.tv_nsec < 0)) { errno = EAGAIN; goto fail; } \ + if (absolute_time_to_delta_time(&delta, timeout, clockid) < 0) { \ + goto fail; \ + } else if ((delta.tv_sec < 0) || (delta.tv_nsec < 0)) { \ + errno = EAGAIN; \ + goto fail; \ + }\ } while (0) @@ -206,7 +183,7 @@ * If `flags & (bus_flag)`, this macro evalutes to `sys_flag`, * otherwise this macro evalutes to 0. */ -#define F(bus_flag, sys_flag) \ +#define F(bus_flag, sys_flag) \ ((flags & (bus_flag)) ? sys_flag : 0) @@ -215,7 +192,7 @@ * Statement wrapper that goes to `fail` on failure */ #define t(inst) \ - if ((inst) == -1) goto fail + do { if ((inst) == -1) goto fail; } while (0) @@ -1194,4 +1171,3 @@ bus_chmod(const char *file, mode_t mode) fail: return -1; } - |