Refactor razor_set_write() a bit and stop writing the buckets section.
authorKristian H?gsberg <krh@redhat.com>
Fri Sep 07 14:17:39 2007 -0400 (2007-09-07)
changeset 1767029e580a0e
parent 16 78383b7bc4fa
child 18 b2bf852ca8d1
Refactor razor_set_write() a bit and stop writing the buckets section.
razor.c
     1.1 --- a/razor.c	Fri Sep 07 14:00:19 2007 -0400
     1.2 +++ b/razor.c	Fri Sep 07 14:17:39 2007 -0400
     1.3 @@ -174,11 +174,6 @@
     1.4  		size = set->header->sections[i].size;
     1.5  
     1.6  		switch (set->header->sections[i].type) {
     1.7 -		case RAZOR_BUCKETS:
     1.8 -			set->buckets.data = (void *) set->header + offset;
     1.9 -			set->buckets.size = size;
    1.10 -			set->buckets.alloc = size;
    1.11 -			break;
    1.12  		case RAZOR_STRINGS:
    1.13  			set->string_pool.data = (void *) set->header + offset;
    1.14  			set->string_pool.size = size;
    1.15 @@ -222,6 +217,7 @@
    1.16  			;
    1.17  		size = set->header->sections[i].type;
    1.18  		munmap(set->header, size);
    1.19 +		free(set->buckets.data);
    1.20  	} else {
    1.21  		free(set->buckets.data);
    1.22  		free(set->string_pool.data);
    1.23 @@ -239,65 +235,43 @@
    1.24  {
    1.25  	char data[4096];
    1.26  	struct razor_set_header *header = (struct razor_set_header *) data;
    1.27 -	int fd, pool_size, packages_size, requires_size, provides_size;
    1.28 -	int properties_size;
    1.29 -
    1.30 -	/* Align these to pages sizes */
    1.31 -	pool_size = (set->string_pool.size + 4095) & ~4095;
    1.32 -	packages_size = (set->packages.size + 4095) & ~4095;
    1.33 -	requires_size = (set->requires.size + 4095) & ~4095;
    1.34 -	provides_size = (set->provides.size + 4095) & ~4095;
    1.35 -	properties_size = (set->property_pool.size + 4095) & ~4095;
    1.36 +	unsigned long offset;
    1.37 +	int i, fd;
    1.38 +	struct { int type; struct array *array; } sections[] = {
    1.39 +		{ RAZOR_STRINGS, &set->string_pool },
    1.40 +		{ RAZOR_PACKAGES, &set->packages },
    1.41 +		{ RAZOR_REQUIRES, &set->requires },
    1.42 +		{ RAZOR_PROVIDES, &set->provides },
    1.43 +		{ RAZOR_PROPERTIES, &set->property_pool },
    1.44 +		{ 0 }
    1.45 +	};
    1.46  
    1.47  	memset(data, 0, sizeof data);
    1.48  	header->magic = RAZOR_MAGIC;
    1.49  	header->version = RAZOR_VERSION;
    1.50 +	offset = sizeof data;
    1.51  
    1.52 -	header->sections[0].type = RAZOR_BUCKETS;
    1.53 -	header->sections[0].offset = sizeof data;
    1.54 -	header->sections[0].size = set->buckets.alloc;
    1.55 +	for (i = 0; sections[i].type != 0; i++) {
    1.56 +		header->sections[i].type = sections[i].type;
    1.57 +		header->sections[i].offset = offset;
    1.58 +		header->sections[i].size = sections[i].array->size;
    1.59 +		offset += (sections[i].array->size + 4095) & ~4095;
    1.60 +	}
    1.61  
    1.62 -	header->sections[1].type = RAZOR_STRINGS;
    1.63 -	header->sections[1].offset =
    1.64 -		header->sections[0].offset + set->buckets.alloc;
    1.65 -	header->sections[1].size = set->string_pool.size;
    1.66 -
    1.67 -	header->sections[2].type = RAZOR_PACKAGES;
    1.68 -	header->sections[2].offset =
    1.69 -		header->sections[1].offset + pool_size;
    1.70 -	header->sections[2].size = set->packages.size;
    1.71 -
    1.72 -	header->sections[3].type = RAZOR_REQUIRES;
    1.73 -	header->sections[3].offset =
    1.74 -		header->sections[2].offset + packages_size;
    1.75 -	header->sections[3].size = set->requires.size;
    1.76 -
    1.77 -	header->sections[4].type = RAZOR_PROVIDES;
    1.78 -	header->sections[4].offset =
    1.79 -		header->sections[3].offset + requires_size;
    1.80 -	header->sections[4].size = set->provides.size;
    1.81 -
    1.82 -	header->sections[5].type = RAZOR_PROPERTIES;
    1.83 -	header->sections[5].offset =
    1.84 -		header->sections[4].offset + provides_size;
    1.85 -	header->sections[5].size = set->property_pool.size;
    1.86 -
    1.87 -	header->sections[6].type = 0;
    1.88 -	header->sections[6].offset =
    1.89 -		header->sections[5].offset + properties_size;
    1.90 -	header->sections[6].size = 0;
    1.91 +	header->sections[i].type = 0;
    1.92 +	header->sections[i].offset = 0;
    1.93 +	header->sections[i].size = 0;
    1.94  
    1.95  	fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0666);
    1.96  	if (fd < 0)
    1.97  		return -1;
    1.98  
    1.99  	write_to_fd(fd, data, sizeof data);
   1.100 -	write_to_fd(fd, set->buckets.data, set->buckets.alloc);
   1.101 -	write_to_fd(fd, set->string_pool.data, pool_size);
   1.102 -	write_to_fd(fd, set->packages.data, packages_size);
   1.103 -	write_to_fd(fd, set->requires.data, requires_size);
   1.104 -	write_to_fd(fd, set->provides.data, provides_size);
   1.105 -	write_to_fd(fd, set->property_pool.data, properties_size);
   1.106 +	for (i = 0; sections[i].type != 0; i++)
   1.107 +		write_to_fd(fd, sections[i].array->data,
   1.108 +			    (sections[i].array->size + 4095) & ~4095);
   1.109 +
   1.110 +	close(fd);
   1.111  
   1.112  	return 0;
   1.113  }
   1.114 @@ -955,9 +929,6 @@
   1.115  		size = set->header->sections[i + 1].offset - offset;
   1.116  
   1.117  		switch (set->header->sections[i].type) {
   1.118 -		case RAZOR_BUCKETS:
   1.119 -			printf("bucket section:\t\t%dkb\n", size / 1024);
   1.120 -			break;
   1.121  		case RAZOR_STRINGS:
   1.122  			printf("string pool:\t\t%dkb\n", size / 1024);
   1.123  			break;