X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/0c515f17c44344813e8949fbb684b357ad70cfdf..087bf010d2cd89848181e49b4ecdfd29a66353e9:/util.c diff --git a/util.c b/util.c index bcbd8c1b..1fdeee6f 100644 --- a/util.c +++ b/util.c @@ -491,12 +491,84 @@ int process_exists(int pid) return(kill(pid,0) == 0 || errno != ESRCH); } -int lock_file(int fd) +/* lock a byte range in a open file */ +int lock_range(int fd, int offset, int len) { - return flock(fd, LOCK_EX) == 0; + struct flock lock; + + lock.l_type = F_WRLCK; + lock.l_whence = SEEK_SET; + lock.l_start = offset; + lock.l_len = len; + lock.l_pid = 0; + + return fcntl(fd,F_SETLK,&lock) == 0; } -int unlock_file(int fd) + +static void glob_expand_one(char *s, char **argv, int *argc, int maxargs) { - return flock(fd, LOCK_UN) == 0; +#ifndef HAVE_GLOB + argv[*argc] = strdup(s); + (*argc)++; + return; +#else + glob_t globbuf; + int i; + + argv[*argc] = strdup(s); + + memset(&globbuf, 0, sizeof(globbuf)); + glob(argv[*argc], 0, NULL, &globbuf); + if (globbuf.gl_pathc == 0) { + (*argc)++; + globfree(&globbuf); + return; + } + for (i=0; i<(maxargs - (*argc)) && i