}
-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));
}
-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)
{
p = fname;
while ((p=strchr(p,'/'))) {
*p = 0;
- mkdir(fname,0777 & ~orig_umask);
+ do_mkdir(fname,0777 & ~orig_umask);
*p = '/';
p++;
}