Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
split the options parsing code into options.c
[rsync/rsync.git]
/
util.c
diff --git
a/util.c
b/util.c
index
f61e91d
..
9b28cb0
100644
(file)
--- a/
util.c
+++ b/
util.c
@@
-32,7
+32,7
@@
int num_waiting(int fd)
}
}
-struct map_struct *map_file(int fd,
off_t
len)
+struct map_struct *map_file(int fd,
OFF_T
len)
{
struct map_struct *ret;
ret = (struct map_struct *)malloc(sizeof(*ret));
{
struct map_struct *ret;
ret = (struct map_struct *)malloc(sizeof(*ret));
@@
-47,14
+47,18
@@
struct map_struct *map_file(int fd,off_t len)
ret->p_len = 0;
#ifdef HAVE_MMAP
ret->p_len = 0;
#ifdef HAVE_MMAP
- if (len < MAX_MAP_SIZE)
- ret->map = (char *)mmap(NULL,len,PROT_READ,MAP_SHARED,fd,0);
+ if (len < MAX_MAP_SIZE) {
+ ret->map = (char *)mmap(NULL,len,PROT_READ,MAP_SHARED,fd,0);
+ if (ret->map == (char *)-1) {
+ ret->map = NULL;
+ }
+ }
#endif
return ret;
}
#endif
return ret;
}
-char *map_ptr(struct map_struct *map,
off_t
offset,int len)
+char *map_ptr(struct map_struct *map,
OFF_T
offset,int len)
{
int nread = -2;
{
int nread = -2;
@@
-83,9
+87,9
@@
char *map_ptr(struct map_struct *map,off_t offset,int len)
map->p_size = len;
}
map->p_size = len;
}
- if (lseek(map->fd,offset,SEEK_SET) != offset ||
+ if (
do_
lseek(map->fd,offset,SEEK_SET) != offset ||
(nread=read(map->fd,map->p,len)) != len) {
(nread=read(map->fd,map->p,len)) != len) {
-
f
printf(FERROR,"EOF in map_ptr! (offset=%d len=%d nread=%d errno=%d)\n",
+
r
printf(FERROR,"EOF in map_ptr! (offset=%d len=%d nread=%d errno=%d)\n",
(int)offset, len, nread, errno);
exit_cleanup(1);
}
(int)offset, len, nread, errno);
exit_cleanup(1);
}
@@
-117,14
+121,14
@@
int piped_child(char **command,int *f_in,int *f_out)
if (pipe(to_child_pipe) < 0 ||
pipe(from_child_pipe) < 0) {
if (pipe(to_child_pipe) < 0 ||
pipe(from_child_pipe) < 0) {
-
f
printf(FERROR,"pipe: %s\n",strerror(errno));
+
r
printf(FERROR,"pipe: %s\n",strerror(errno));
exit_cleanup(1);
}
pid = do_fork();
if (pid < 0) {
exit_cleanup(1);
}
pid = do_fork();
if (pid < 0) {
-
f
printf(FERROR,"fork: %s\n",strerror(errno));
+
r
printf(FERROR,"fork: %s\n",strerror(errno));
exit_cleanup(1);
}
exit_cleanup(1);
}
@@
-135,21
+139,21
@@
int piped_child(char **command,int *f_in,int *f_out)
close(to_child_pipe[1]) < 0 ||
close(from_child_pipe[0]) < 0 ||
dup2(from_child_pipe[1], STDOUT_FILENO) < 0) {
close(to_child_pipe[1]) < 0 ||
close(from_child_pipe[0]) < 0 ||
dup2(from_child_pipe[1], STDOUT_FILENO) < 0) {
-
f
printf(FERROR,"Failed to dup/close : %s\n",strerror(errno));
+
r
printf(FERROR,"Failed to dup/close : %s\n",strerror(errno));
exit_cleanup(1);
}
if (to_child_pipe[0] != STDIN_FILENO) close(to_child_pipe[0]);
if (from_child_pipe[1] != STDOUT_FILENO) close(from_child_pipe[1]);
umask(orig_umask);
execvp(command[0], command);
exit_cleanup(1);
}
if (to_child_pipe[0] != STDIN_FILENO) close(to_child_pipe[0]);
if (from_child_pipe[1] != STDOUT_FILENO) close(from_child_pipe[1]);
umask(orig_umask);
execvp(command[0], command);
-
f
printf(FERROR,"Failed to exec %s : %s\n",
+
r
printf(FERROR,"Failed to exec %s : %s\n",
command[0],strerror(errno));
exit_cleanup(1);
}
if (close(from_child_pipe[1]) < 0 ||
close(to_child_pipe[0]) < 0) {
command[0],strerror(errno));
exit_cleanup(1);
}
if (close(from_child_pipe[1]) < 0 ||
close(to_child_pipe[0]) < 0) {
-
f
printf(FERROR,"Failed to close : %s\n",strerror(errno));
+
r
printf(FERROR,"Failed to close : %s\n",strerror(errno));
exit_cleanup(1);
}
exit_cleanup(1);
}
@@
-167,14
+171,14
@@
int local_child(int argc, char **argv,int *f_in,int *f_out)
if (pipe(to_child_pipe) < 0 ||
pipe(from_child_pipe) < 0) {
if (pipe(to_child_pipe) < 0 ||
pipe(from_child_pipe) < 0) {
-
f
printf(FERROR,"pipe: %s\n",strerror(errno));
+
r
printf(FERROR,"pipe: %s\n",strerror(errno));
exit_cleanup(1);
}
pid = do_fork();
if (pid < 0) {
exit_cleanup(1);
}
pid = do_fork();
if (pid < 0) {
-
f
printf(FERROR,"fork: %s\n",strerror(errno));
+
r
printf(FERROR,"fork: %s\n",strerror(errno));
exit_cleanup(1);
}
exit_cleanup(1);
}
@@
-189,17
+193,17
@@
int local_child(int argc, char **argv,int *f_in,int *f_out)
close(to_child_pipe[1]) < 0 ||
close(from_child_pipe[0]) < 0 ||
dup2(from_child_pipe[1], STDOUT_FILENO) < 0) {
close(to_child_pipe[1]) < 0 ||
close(from_child_pipe[0]) < 0 ||
dup2(from_child_pipe[1], STDOUT_FILENO) < 0) {
-
f
printf(FERROR,"Failed to dup/close : %s\n",strerror(errno));
+
r
printf(FERROR,"Failed to dup/close : %s\n",strerror(errno));
exit_cleanup(1);
}
if (to_child_pipe[0] != STDIN_FILENO) close(to_child_pipe[0]);
if (from_child_pipe[1] != STDOUT_FILENO) close(from_child_pipe[1]);
exit_cleanup(1);
}
if (to_child_pipe[0] != STDIN_FILENO) close(to_child_pipe[0]);
if (from_child_pipe[1] != STDOUT_FILENO) close(from_child_pipe[1]);
- start_server(argc, argv);
+ start_server(
STDIN_FILENO, STDOUT_FILENO,
argc, argv);
}
if (close(from_child_pipe[1]) < 0 ||
close(to_child_pipe[0]) < 0) {
}
if (close(from_child_pipe[1]) < 0 ||
close(to_child_pipe[0]) < 0) {
-
f
printf(FERROR,"Failed to close : %s\n",strerror(errno));
+
r
printf(FERROR,"Failed to close : %s\n",strerror(errno));
exit_cleanup(1);
}
exit_cleanup(1);
}
@@
-213,13
+217,13
@@
int local_child(int argc, char **argv,int *f_in,int *f_out)
void out_of_memory(char *str)
{
void out_of_memory(char *str)
{
-
f
printf(FERROR,"ERROR: out of memory in %s\n",str);
+
r
printf(FERROR,"ERROR: out of memory in %s\n",str);
exit_cleanup(1);
}
void overflow(char *str)
{
exit_cleanup(1);
}
void overflow(char *str)
{
-
f
printf(FERROR,"ERROR: buffer overflow in %s\n",str);
+
r
printf(FERROR,"ERROR: buffer overflow in %s\n",str);
exit_cleanup(1);
}
exit_cleanup(1);
}
@@
-366,20
+370,20
@@
int copy_file(char *source, char *dest, mode_t mode)
ifd = open(source, O_RDONLY);
if (ifd == -1) {
ifd = open(source, O_RDONLY);
if (ifd == -1) {
-
f
printf(FERROR,"open %s: %s\n",
+
r
printf(FERROR,"open %s: %s\n",
source,strerror(errno));
return -1;
}
if (do_unlink(dest) && errno != ENOENT) {
source,strerror(errno));
return -1;
}
if (do_unlink(dest) && errno != ENOENT) {
-
f
printf(FERROR,"unlink %s: %s\n",
+
r
printf(FERROR,"unlink %s: %s\n",
dest,strerror(errno));
return -1;
}
ofd = do_open(dest, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, mode);
if (ofd < 0) {
dest,strerror(errno));
return -1;
}
ofd = do_open(dest, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, mode);
if (ofd < 0) {
-
f
printf(FERROR,"open %s: %s\n",
+
r
printf(FERROR,"open %s: %s\n",
dest,strerror(errno));
close(ifd);
return -1;
dest,strerror(errno));
close(ifd);
return -1;
@@
-387,7
+391,7
@@
int copy_file(char *source, char *dest, mode_t mode)
while ((len = safe_read(ifd, buf, sizeof(buf))) > 0) {
if (full_write(ofd, buf, len) < 0) {
while ((len = safe_read(ifd, buf, sizeof(buf))) > 0) {
if (full_write(ofd, buf, len) < 0) {
-
f
printf(FERROR,"write %s: %s\n",
+
r
printf(FERROR,"write %s: %s\n",
dest,strerror(errno));
close(ifd);
close(ofd);
dest,strerror(errno));
close(ifd);
close(ofd);
@@
-399,7
+403,7
@@
int copy_file(char *source, char *dest, mode_t mode)
close(ofd);
if (len < 0) {
close(ofd);
if (len < 0) {
-
f
printf(FERROR,"read %s: %s\n",
+
r
printf(FERROR,"read %s: %s\n",
source,strerror(errno));
return -1;
}
source,strerror(errno));
return -1;
}
@@
-441,3
+445,13
@@
void kill_all(int sig)
kill(all_pids[i], sig);
}
}
kill(all_pids[i], sig);
}
}
+
+/* like strncpy but does not 0 fill the buffer and always null
+ terminates (thus it can use maxlen+1 space in d) */
+void strlcpy(char *d, char *s, int maxlen)
+{
+ int len = strlen(s);
+ if (len > maxlen) len = maxlen;
+ memcpy(d, s, len);
+ d[len] = 0;
+}