aboutsummaryrefslogtreecommitdiffstats
path: root/src/entry.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/entry.c')
-rw-r--r--src/entry.c40
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));
+
+}