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

commit 6d246a7f6aa0f28c6431b9c566793a7f9ad0bfb2
Author: James Buren <[email protected]>
Date:   Tue Sep 11 05:44:18 2012 -0500

add functions for opening a device and its disk label.

diff --git a/src/local.h b/src/local.h
index 58bdb61..28d8706 100644
--- a/src/local.h
+++ b/src/local.h
@@ -31,6 +31,12 @@ struct global
bool netinstall;
};

+struct parted
+{
+  PedDevice *device;
+  PedDisk *disk;
+};
+
struct install
{
char *name;
@@ -60,6 +66,8 @@ extern bool size_to_string(char *s,size_t n,long long 
size,bool pad);
extern int get_text_length(const char *s);
extern bool execute(const char *command,const char *root,pid_t *cpid);
extern void *malloc0(size_t size);
+extern struct parted *parted_open(const char *path);
+extern void parted_close(struct parted *parted);
extern int get_text_screen_width(const char *s);
extern bool get_text_screen_size(const char *text,int *width,int *height);
extern bool get_button_screen_size(const char *text,int *width,int *height);
@@ -96,7 +104,7 @@ extern bool ui_window_install(struct install *groups);
extern FILE *logfile;
extern int main(int argc,char **argv);

-extern struct global g;
+extern struct global *g;
extern struct module install_module;
extern struct module postconfig_module;
extern struct module *modules[];
diff --git a/src/main.c b/src/main.c
index ebbb1f7..a5631e8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -31,9 +31,9 @@ extern int main(int argc,char **argv)
for( PedDiskType *i = 0 ; (i = ped_disk_type_get_next(i)) != 0 ; )
{
if(strcmp(i->name,"msdos") == 0)
-      g.doslabel = i;
+      g->doslabel = i;
else if(strcmp(i->name,"gpt") == 0)
-      g.gptlabel = i;
+      g->gptlabel = i;
}

code = ui_main(argc,argv);
@@ -45,13 +45,15 @@ extern int main(int argc,char **argv)
return code;
}

-struct global g =
+static struct global local =
{
.doslabel = 0,
.gptlabel = 0,
.netinstall = true
};

+struct global *g = &local;
+
struct module *modules[] =
{
&install_module,
diff --git a/src/utility.c b/src/utility.c
index 828daec..8312d9c 100644
--- a/src/utility.c
+++ b/src/utility.c
@@ -194,6 +194,49 @@ extern void *malloc0(size_t size)
return memset(malloc(size),0,size);
}

+extern struct parted *parted_open(const char *path)
+{
+  PedDevice *device = 0;
+  PedDiskType *disktype = 0;
+  PedDisk *disk = 0;
+  struct parted *parted = 0;
+
+  if(path == 0)
+  {
+    errno = EINVAL;
+    fprintf(logfile,"%s: %s\n",__func__,strerror(errno));
+    return 0;
+  }
+
+  if((device = ped_device_get(path)) == 0)
+    return 0;
+
+  if((disktype = ped_disk_probe(device)) != 0 && (disktype == g->doslabel || 
disktype == g->gptlabel))
+    disk = ped_disk_new(device);
+
+  parted = malloc0(sizeof(struct parted));
+
+  parted->device = device;
+
+  parted->disk = disk;
+
+  return parted;
+}
+
+extern void parted_close(struct parted *parted)
+{
+  if(parted != 0)
+  {
+    if(parted->disk != 0)
+      ped_disk_destroy(parted->disk);
+
+    if(parted->device != 0)
+      ped_device_destroy(parted->device);
+
+    free(parted);
+  }
+}
+
extern int get_text_screen_width(const char *s)
{
wchar_t wc = 0;
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to