diff options
Diffstat (limited to 'src/entry.c')
-rw-r--r-- | src/entry.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/entry.c b/src/entry.c new file mode 100644 index 0000000..2044813 --- /dev/null +++ b/src/entry.c @@ -0,0 +1,40 @@ +#include "project.h" + +void entry_write(DISK *d,GPT_header *h,int n,GPT_entry *e) +{ +uint8_t buf[SECTOR_SIZE]; +uint64_t lba=GPT_ENTRY_LBA (h, n); + +disk_read (d, buf, lba,1); +memcpy(&buf[GPT_ENTRY_OFFSET(h,n)],e,sizeof(*e)); +disk_write (d, buf, lba, 1); +} + +GPT_entry entry_read(DISK *d,GPT_header *h,int n) +{ +uint8_t buf[SECTOR_SIZE]; +GPT_entry e; + +disk_read (d, buf, GPT_ENTRY_LBA (h, n), 1); +memcpy(&e,&buf[GPT_ENTRY_OFFSET(h,n)],sizeof(e)); +return e; +} + + +int entry_empty(GPT_entry *e) { +GUID empty=GUID_TYPE_EMPTY; +return !guid_cmp(&e->type,&empty); +} + +void entry_show(GPT_entry *e) +{ +char name[sizeof(e->name)+1]; + +utf16_to_ascii(e->name,sizeof(e->name),name,sizeof(name)); + + +printf(" Name %s\n",name); +printf(" Flags %16x Label %s\n",(int) e->flags,guid_to_a(e->label)); +printf(" Start %10lld End %10lld Type %s\n",(long long) e->start,(long long) e->end,guid_to_a(e->type)); + +} |