Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=fwsetup-ng.git;a=commitdiff;h=2b2c67f5a7459f757fd11b7004ef0244906ca6ce

commit 2b2c67f5a7459f757fd11b7004ef0244906ca6ce
Author: James Buren <[email protected]>
Date:   Mon Oct 8 11:01:21 2012 -0500

in disk struct, cache the number of usable sectors
this is needed because a certain size is reserved for
the partition table

diff --git a/src/block.c b/src/block.c
index 3cb9fb0..37ccfa8 100644
--- a/src/block.c
+++ b/src/block.c
@@ -44,6 +44,7 @@ struct disk
{
struct device *device;
enum disktype type;
+  long long sectors;
bool modified;
unsigned int dosuuid;
char gptuuid[37];
@@ -150,6 +151,22 @@ static inline long long alignsector(const struct device 
*device,long long sector
return sector + (alignment - (sector % alignment));
}

+static inline void getsectors(struct disk *disk)
+{
+  long long size = 0;
+  long long sectorsize = disk->device->sectorsize;
+  lldiv_t n = {0};
+
+  if(disk->type == DISKTYPE_DOS)
+    size = 512;
+  else if(disk->type == DISKTYPE_GPT)
+    size = 512 + 512 + (128 * 128);
+
+  n = lldiv(size,sectorsize);
+
+  disk->sectors = disk->device->sectors - n.quot - (n.rem == 0) ? 0 : 1;
+}
+
extern struct device *device_open(const char *path)
{
int fd = -1;
@@ -302,6 +319,8 @@ extern struct disk *disk_open(struct device *device)
goto bail;
}

+  getsectors(&disk);
+
if(!getuuid(&disk))
goto bail;

@@ -399,6 +418,8 @@ extern void disk_new_table(struct disk *disk,const char 
*type)

disk->type = disktype;

+  getsectors(disk);
+
disk->modified = true;
}
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to