}
-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));
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;
}
-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;
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) {
fprintf(FERROR,"EOF in map_ptr! (offset=%d len=%d nread=%d errno=%d)\n",
(int)offset, len, nread, errno);
return pid;
}
+int local_child(int argc, char **argv,int *f_in,int *f_out)
+{
+ int pid;
+ int to_child_pipe[2];
+ int from_child_pipe[2];
+
+ if (pipe(to_child_pipe) < 0 ||
+ pipe(from_child_pipe) < 0) {
+ fprintf(FERROR,"pipe: %s\n",strerror(errno));
+ exit_cleanup(1);
+ }
+
+
+ pid = do_fork();
+ if (pid < 0) {
+ fprintf(FERROR,"fork: %s\n",strerror(errno));
+ exit_cleanup(1);
+ }
+
+ if (pid == 0) {
+ extern int am_sender;
+ extern int am_server;
+
+ am_sender = !am_sender;
+ am_server = 1;
+
+ if (dup2(to_child_pipe[0], STDIN_FILENO) < 0 ||
+ close(to_child_pipe[1]) < 0 ||
+ close(from_child_pipe[0]) < 0 ||
+ dup2(from_child_pipe[1], STDOUT_FILENO) < 0) {
+ fprintf(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]);
+ start_server(argc, argv);
+ }
+
+ if (close(from_child_pipe[1]) < 0 ||
+ close(to_child_pipe[0]) < 0) {
+ fprintf(FERROR,"Failed to close : %s\n",strerror(errno));
+ exit_cleanup(1);
+ }
+
+ *f_in = from_child_pipe[0];
+ *f_out = to_child_pipe[1];
+
+ return pid;
+}
+
+
void out_of_memory(char *str)
{
- fprintf(FERROR,"out of memory in %s\n",str);
+ fprintf(FERROR,"ERROR: out of memory in %s\n",str);
+ exit_cleanup(1);
+}
+
+void overflow(char *str)
+{
+ fprintf(FERROR,"ERROR: buffer overflow in %s\n",str);
exit_cleanup(1);
}
p = fname;
while ((p=strchr(p,'/'))) {
*p = 0;
- mkdir(fname,0777 & ~orig_umask);
+ do_mkdir(fname,0777 & ~orig_umask);
*p = '/';
p++;
}