This no longer depends on mkfifo.diff.
[rsync/rsync-patches.git] / mkfifo.diff
CommitLineData
27622b93
WD
1--- orig/Makefile.in 2004-08-13 07:18:58
2+++ Makefile.in 2004-09-23 06:22:00
3@@ -41,7 +41,7 @@ popt_OBJS=popt/findme.o popt/popt.o po
4 popt/popthelp.o popt/poptparse.o
5 OBJS=$(OBJS1) $(OBJS2) $(OBJS3) $(DAEMON_OBJ) $(LIBOBJ) $(ZLIBOBJ) @BUILD_POPT@
6
7-TLS_OBJ = tls.o syscall.o lib/permstring.o
8+TLS_OBJ = tls.o syscall.o lib/compat.o lib/permstring.o
9
10 # Programs we must have to run the test cases
11 CHECK_PROGS = rsync$(EXEEXT) tls$(EXEEXT) getgroups$(EXEEXT) getfsdev$(EXEEXT) \
12@@ -83,7 +83,7 @@ getgroups$(EXEEXT): getgroups.o
13 getfsdev$(EXEEXT): getfsdev.o
14 $(CC) $(CFLAGS) $(LDFLAGS) -o $@ getfsdev.o $(LIBS)
15
16-TRIMSLASH_OBJ = trimslash.o syscall.o
17+TRIMSLASH_OBJ = trimslash.o syscall.o lib/compat.o
18 trimslash$(EXEEXT): $(TRIMSLASH_OBJ)
19 $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(TRIMSLASH_OBJ) $(LIBS)
20
9cfe8375
WD
21--- orig/syscall.c 2004-08-02 21:56:59
22+++ syscall.c 2004-09-23 05:46:46
23@@ -26,6 +26,10 @@
24
25 #include "rsync.h"
5d24532c 26
9cfe8375 27+#if HAVE_SYS_UN_H
5d24532c
WD
28+#include <sys/un.h>
29+#endif
30+
9cfe8375
WD
31 extern int dry_run;
32 extern int read_only;
33 extern int list_only;
34@@ -76,6 +80,29 @@ int do_mknod(char *pathname, mode_t mode
5d24532c
WD
35 {
36 if (dry_run) return 0;
37 RETURN_ERROR_IF_RO_OR_LO;
38+# if HAVE_MKFIFO
39+ if (S_ISFIFO(mode))
40+ return mkfifo(pathname, mode);
41+# endif
42+# if HAVE_SYS_UN_H
43+ if (S_ISSOCK(mode)) {
44+ int sock;
45+ struct sockaddr_un saddr;
9cfe8375 46+ unsigned int len;
5d24532c
WD
47+
48+ saddr.sun_family = AF_UNIX;
9cfe8375
WD
49+ len = strlcpy(saddr.sun_path, pathname, sizeof saddr.sun_path);
50+ saddr.sun_len = len >= sizeof saddr.sun_path
51+ ? sizeof saddr.sun_path : len + 1;
5d24532c 52+
f5a01b19
WD
53+ if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0
54+ || (unlink(pathname) < 0 && errno != ENOENT)
55+ || (bind(sock, (struct sockaddr*)&saddr, sizeof saddr)) < 0)
5d24532c
WD
56+ return -1;
57+ close(sock);
58+ return do_chmod(pathname, mode);
59+ }
60+# endif
61 return mknod(pathname, mode, dev);
62 }
63 #endif