Commit | Line | Data |
---|---|---|
9cfe8375 WD |
1 | --- orig/syscall.c 2004-08-02 21:56:59 |
2 | +++ syscall.c 2004-09-23 05:46:46 | |
3 | @@ -26,6 +26,10 @@ | |
4 | ||
5 | #include "rsync.h" | |
5d24532c | 6 | |
9cfe8375 | 7 | +#if HAVE_SYS_UN_H |
5d24532c WD |
8 | +#include <sys/un.h> |
9 | +#endif | |
10 | + | |
9cfe8375 WD |
11 | extern int dry_run; |
12 | extern int read_only; | |
13 | extern int list_only; | |
14 | @@ -76,6 +80,29 @@ int do_mknod(char *pathname, mode_t mode | |
5d24532c WD |
15 | { |
16 | if (dry_run) return 0; | |
17 | RETURN_ERROR_IF_RO_OR_LO; | |
18 | +# if HAVE_MKFIFO | |
19 | + if (S_ISFIFO(mode)) | |
20 | + return mkfifo(pathname, mode); | |
21 | +# endif | |
22 | +# if HAVE_SYS_UN_H | |
23 | + if (S_ISSOCK(mode)) { | |
24 | + int sock; | |
25 | + struct sockaddr_un saddr; | |
9cfe8375 | 26 | + unsigned int len; |
5d24532c WD |
27 | + |
28 | + saddr.sun_family = AF_UNIX; | |
9cfe8375 WD |
29 | + len = strlcpy(saddr.sun_path, pathname, sizeof saddr.sun_path); |
30 | + saddr.sun_len = len >= sizeof saddr.sun_path | |
31 | + ? sizeof saddr.sun_path : len + 1; | |
5d24532c | 32 | + |
f5a01b19 WD |
33 | + if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0 |
34 | + || (unlink(pathname) < 0 && errno != ENOENT) | |
35 | + || (bind(sock, (struct sockaddr*)&saddr, sizeof saddr)) < 0) | |
5d24532c WD |
36 | + return -1; |
37 | + close(sock); | |
38 | + return do_chmod(pathname, mode); | |
39 | + } | |
40 | +# endif | |
41 | return mknod(pathname, mode, dev); | |
42 | } | |
43 | #endif |