NodesX *NewNodeList(int append) { NodesX *nodesx; nodesx=(NodesX*)calloc(1,sizeof(NodesX)); assert(nodesx); /* Check calloc() worked */ nodesx->filename=(char*)malloc(strlen(option_tmpdirname)+32); if(append) sprintf(nodesx->filename,"%s/nodesx.input.tmp",option_tmpdirname); else sprintf(nodesx->filename,"%s/nodesx.%p.tmp",option_tmpdirname,(void*)nodesx); if(append) { off_t size; nodesx->fd=OpenFileAppend(nodesx->filename); size=SizeFile(nodesx->filename); nodesx->number=size/sizeof(NodeX); } else nodesx->fd=OpenFileNew(nodesx->filename); return(nodesx); }
void *MapFile(const char *filename) { int fd; off_t size; void *address; /* Open the file and get its size */ fd=ReOpenFile(filename); size=SizeFile(filename); /* Map the file */ address=mmap(NULL,size,PROT_READ,MAP_SHARED,fd,0); if(address==MAP_FAILED) { close(fd); fprintf(stderr,"Cannot mmap file '%s' [%s].\n",filename,strerror(errno)); exit(EXIT_FAILURE); } mappedfiles=(struct mmapinfo*)realloc((void*)mappedfiles,(nmappedfiles+1)*sizeof(struct mmapinfo)); mappedfiles[nmappedfiles].filename=filename; mappedfiles[nmappedfiles].fd=fd; mappedfiles[nmappedfiles].address=address; mappedfiles[nmappedfiles].length=size; nmappedfiles++; return(address); }
void open_errorlog(const char *filename,int append,int bin) { /* Text log file */ errorlogfilename=(char*)malloc(strlen(filename)+8); strcpy(errorlogfilename,filename); #if defined(_MSC_VER) || defined(__MINGW32__) errorlogfile=fopen(errorlogfilename,append?"ab":"wb"); #else errorlogfile=fopen(errorlogfilename,append?"a" :"w" ); #endif if(!errorlogfile) { fprintf(stderr,"Cannot open file '%s' for writing [%s].\n",errorlogfilename,strerror(errno)); exit(EXIT_FAILURE); } /* Binary log file */ if(bin) { errorbinfilename=(char*)malloc(strlen(filename)+8); sprintf(errorbinfilename,"%s.tmp",filename); errorfileoffset=0; if(append) { if(ExistsFile(filename)) errorfileoffset=SizeFile(filename); errorbinfile=OpenFileBufferedAppend(errorbinfilename); } else errorbinfile=OpenFileBufferedNew(errorbinfilename); } else errorbinfile=-1; }