librazor/rpm.c
changeset 324 e41980e2f108
parent 301 4124c37fd953
child 325 73393734833c
     1.1 --- a/librazor/rpm.c	Sun Jun 29 17:32:19 2008 +0100
     1.2 +++ b/librazor/rpm.c	Wed Jan 07 17:26:33 2009 +0000
     1.3 @@ -23,7 +23,6 @@
     1.4  #include <string.h>
     1.5  #include <errno.h>
     1.6  #include <sys/stat.h>
     1.7 -#include <sys/mman.h>
     1.8  #include <sys/types.h>
     1.9  #include <sys/wait.h>
    1.10  #include <fcntl.h>
    1.11 @@ -353,10 +352,8 @@
    1.12  {
    1.13  	struct razor_rpm *rpm;
    1.14  	struct rpm_header_index *base, *index;
    1.15 -	struct stat buf;
    1.16  	unsigned int count, i, nindex, hsize;
    1.17  	const char *name;
    1.18 -	int fd;
    1.19  
    1.20  	assert (filename != NULL);
    1.21  
    1.22 @@ -365,25 +362,12 @@
    1.23  		return NULL;
    1.24  	memset(rpm, 0, sizeof *rpm);
    1.25  
    1.26 -	fd = open(filename, O_RDONLY);
    1.27 -	if (fd < 0) {
    1.28 -		fprintf(stderr, "couldn't open %s\n", filename);
    1.29 +	rpm->map = razor_file_get_contents(filename, &rpm->size);
    1.30 +	if (!rpm->map) {
    1.31 +		fprintf(stderr, "couldn't get contents of %s (%m)\n", filename);
    1.32  		return NULL;
    1.33  	}
    1.34  
    1.35 -	if (fstat(fd, &buf) < 0) {
    1.36 -		fprintf(stderr, "failed to stat %s (%m)\n", filename);
    1.37 -		return NULL;
    1.38 -	}
    1.39 -
    1.40 -	rpm->size = buf.st_size;
    1.41 -	rpm->map = mmap(NULL, rpm->size, PROT_READ, MAP_PRIVATE, fd, 0);
    1.42 -	if (rpm->map == MAP_FAILED) {
    1.43 -		fprintf(stderr, "couldn't mmap %s\n", filename);
    1.44 -		return NULL;
    1.45 -	}
    1.46 -	close(fd);
    1.47 -
    1.48  	rpm->signature = rpm->map + RPM_LEAD_SIZE;
    1.49  	nindex = ntohl(rpm->signature->nindex);
    1.50  	hsize = ntohl(rpm->signature->hsize);
    1.51 @@ -780,7 +764,7 @@
    1.52  	assert (rpm != NULL);
    1.53  
    1.54  	free(rpm->dirs);
    1.55 -	err = munmap(rpm->map, rpm->size);
    1.56 +	err = razor_file_free_contents(rpm->map, rpm->size);
    1.57  	free(rpm);
    1.58  
    1.59  	return err;