X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/0c515f17c44344813e8949fbb684b357ad70cfdf..0cea42440ffc9edab56710ab0baaff9454a86fea:/util.c diff --git a/util.c b/util.c index bcbd8c1b..ffbdc932 100644 --- a/util.c +++ b/util.c @@ -491,12 +491,43 @@ 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) + +void glob_expand(char **argv, int *argc, int maxargs) { - return flock(fd, LOCK_UN) == 0; +#ifndef HAVE_GLOB + (*argc)++; + return; +#else + glob_t globbuf; + int i; + + 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