util: replace fseek/ftell/rewind with fstat
It's a more direct approach to get the file size. Change-Id: If49df26bf4996bd556c675f3a673d0003b4adf89 Signed-off-by: Patrick Georgi <patrick@georgi-clan.de> Reviewed-on: http://review.coreboot.org/6594 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
@@ -223,6 +223,14 @@ static int exists(const char *dirname, const char *filename)
|
||||
return does_exist;
|
||||
}
|
||||
|
||||
static off_t get_file_size(FILE *f)
|
||||
{
|
||||
struct stat s;
|
||||
int fd = fileno(f);
|
||||
if (fd == -1) return -1;
|
||||
if (fstat(fd, &s) == -1) return -1;
|
||||
return s.st_size;
|
||||
}
|
||||
|
||||
static char *slurp_file(const char *dirname, const char *filename, off_t *r_size)
|
||||
{
|
||||
@@ -246,9 +254,10 @@ static char *slurp_file(const char *dirname, const char *filename, off_t *r_size
|
||||
die("Cannot open '%s' : %s\n",
|
||||
filename, strerror(errno));
|
||||
}
|
||||
fseek(file, 0, SEEK_END);
|
||||
size = ftell(file);
|
||||
fseek(file, 0, SEEK_SET);
|
||||
size = get_file_size(file);
|
||||
if (size == -1) {
|
||||
die("Could not fetch size of '%s': %s\n", filename, strerror(errno));
|
||||
}
|
||||
*r_size = size +1;
|
||||
buf = xmalloc(size +2, filename);
|
||||
buf[size] = '\n'; /* Make certain the file is newline terminated */
|
||||
|
Reference in New Issue
Block a user