return (p + (offset - p_offset));
}
- len = MAX(len,WRITE_BLOCK_SIZE);
+ len = MAX(len,CHUNK_SIZE);
len = MIN(len,map_size - offset);
if (len > p_size) {
if (lseek(map_fd,offset,SEEK_SET) != offset ||
read(map_fd,p,len) != len) {
fprintf(stderr,"EOF in map_ptr!\n");
- exit(1);
+ exit_cleanup(1);
}
p_offset = offset;
void unmap_file(char *buf,off_t len)
{
+#ifdef HAVE_MMAP
if (len > 0 && buf)
munmap(buf,len);
+#endif
map_fd = -1;
map_size = 0;
p_len = 0;
if (pipe(to_child_pipe) < 0 ||
pipe(from_child_pipe) < 0) {
fprintf(stderr,"pipe: %s\n",strerror(errno));
- exit(1);
+ exit_cleanup(1);
}
pid = fork();
if (pid < 0) {
fprintf(stderr,"fork: %s\n",strerror(errno));
- exit(1);
+ exit_cleanup(1);
}
if (pid == 0)
close(from_child_pipe[0]) < 0 ||
dup2(from_child_pipe[1], STDOUT_FILENO) < 0) {
fprintf(stderr,"Failed to dup/close : %s\n",strerror(errno));
- exit(1);
+ exit_cleanup(1);
}
execvp(command[0], command);
fprintf(stderr,"Failed to exec %s : %s\n",
command[0],strerror(errno));
- exit(1);
+ exit_cleanup(1);
}
if (close(from_child_pipe[1]) < 0 ||
close(to_child_pipe[0]) < 0) {
fprintf(stderr,"Failed to close : %s\n",strerror(errno));
- exit(1);
+ exit_cleanup(1);
}
*f_in = from_child_pipe[0];
void out_of_memory(char *str)
{
fprintf(stderr,"out of memory in %s\n",str);
- exit(1);
+ exit_cleanup(1);
}