int AsGetFile ( char *Filename, char **FileBuffer, UINT32 *FileSize) { FILE *File; UINT32 Size; char *Buffer; int Seek1; int Seek2; size_t Actual; /* Binary mode leaves CR/LF pairs */ File = fopen (Filename, "rb"); if (!File) { printf ("Could not open file %s\n", Filename); return (-1); } /* Need file size to allocate a buffer */ Seek1 = fseek (File, 0L, SEEK_END); Size = ftell (File); Seek2 = fseek (File, 0L, SEEK_SET); if (Seek1 || Seek2 || (Size == -1)) { printf ("Could not get file size for %s\n", Filename); goto ErrorExit; } /* * Create a buffer for the entire file * Add plenty extra buffer to accommodate string replacements */ Gbl_TotalSize += Size; Buffer = calloc (Size * 2, 1); if (!Buffer) { printf ("Could not allocate buffer of size %u\n", Size * 2); goto ErrorExit; } /* Read the entire file */ Actual = fread (Buffer, 1, Size, File); if (Actual != Size) { printf ("Could not read the input file %s (%u bytes)\n", Filename, Size); goto ErrorExit; } Buffer [Size] = 0; /* Null terminate the buffer */ fclose (File); /* Check for unix contamination */ Gbl_HasLoneLineFeeds = AsDetectLoneLineFeeds (Filename, Buffer); /* * Convert all CR/LF pairs to LF only. We do this locally so that * this code is portable across operating systems. */ AsConvertToLineFeeds (Buffer); *FileBuffer = Buffer; *FileSize = Size; return (0); ErrorExit: fclose (File); return (-1); }
int AsGetFile ( char *Filename, char **FileBuffer, UINT32 *FileSize) { int FileHandle; UINT32 Size; char *Buffer; /* Binary mode leaves CR/LF pairs */ FileHandle = open (Filename, O_BINARY | O_RDONLY); if (!FileHandle) { printf ("Could not open %s\n", Filename); return -1; } if (fstat (FileHandle, &Gbl_StatBuf)) { printf ("Could not get file status for %s\n", Filename); goto ErrorExit; } /* * Create a buffer for the entire file * Add plenty extra buffer to accomodate string replacements */ Size = Gbl_StatBuf.st_size; Gbl_TotalSize += Size; Buffer = calloc (Size * 2, 1); if (!Buffer) { printf ("Could not allocate buffer of size %u\n", Size * 2); goto ErrorExit; } /* Read the entire file */ Size = read (FileHandle, Buffer, Size); if (Size == -1) { printf ("Could not read the input file %s\n", Filename); goto ErrorExit; } Buffer [Size] = 0; /* Null terminate the buffer */ close (FileHandle); /* Check for unix contamination */ Gbl_HasLoneLineFeeds = AsDetectLoneLineFeeds (Filename, Buffer); /* * Convert all CR/LF pairs to LF only. We do this locally so that * this code is portable across operating systems. */ AsConvertToLineFeeds (Buffer); *FileBuffer = Buffer; *FileSize = Size; return 0; ErrorExit: close (FileHandle); return -1; }