Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=fvbe.git;a=commitdiff;h=682f8113a53bc2a4abadc38877b3c8cb88e9a774

commit 682f8113a53bc2a4abadc38877b3c8cb88e9a774
Author: James Buren <[email protected]>
Date:   Sun Aug 25 17:15:37 2013 -0500

dmconfig: add function which generates the display manager list

diff --git a/src/dmconfig.c b/src/dmconfig.c
index 9051751..fa2fdf9 100644
--- a/src/dmconfig.c
+++ b/src/dmconfig.c
@@ -20,22 +20,46 @@
static char **managers = 0;
static char *manager = 0;

-static bool dmconfig_action(const char *mode)
+static bool dmconfig_setup_managers(void)
{
-  const char *old = 0;
-  const char *new = "etc/systemd/system/default.target";
+  static const char *list[] =
+  {
+    "none",
+    "gdm",
+    "kdm",
+    "lightdm",
+    "lxdm",
+    "xdm",
+    0
+  };
+  static const size_t list_count = (sizeof(list) / sizeof(*list)) - 1;
+  size_t i = 0;
+  const char *s = 0;
+  char path[PATH_MAX] = {0};
+  struct stat st = {0};
+  size_t j = 0;

-  if(strcmp(mode,"Text Console") == 0)
-    old = "/lib/systemd/system/multi-user.target";
-  else if(strcmp(mode,"Display Manager") == 0)
-    old = "/lib/systemd/system/graphical.target";
-  else
+  managers = alloc(char *,list_count + 1);
+
+  for( ; (s = list[i]) != 0 ; ++i )
{
-    errno = EINVAL;
-    error(strerror(errno));
-    return false;
+    strfcpy(path,sizeof(path),"lib/systemd/system/%s.service",s);
+
+    if(stat(path,&st) == 0 && S_ISREG(st.st_mode) && (st.st_mode & 0644) == 
0644)
+      managers[j++] = strdup(s);
}

+  managers[j] = 0;
+
+  return true;
+}
+
+
+static bool dmconfig_symlink_target(void)
+{
+  const char *old = (strcmp(manager,"none") == 0) ? 
"/lib/systemd/system/multi-user.target" : 
"/lib/systemd/system/graphical.target";
+  const char *new = "etc/systemd/system/default.target";
+
if(unlink(new) == -1 && errno != ENOENT)
{
error(strerror(errno));
@@ -53,7 +77,10 @@ static bool dmconfig_action(const char *mode)

static bool dmconfig_start(void)
{
-  if(!ui_window_list(MODE_TITLE,MODE_TEXT,modes,&mode))
+  if(!dmconfig_setup_managers())
+    return false;
+
+  if(!ui_window_list(MODE_TITLE,MODE_TEXT,managers,&manager))
return false;

return true;
@@ -63,11 +90,11 @@ static bool dmconfig_finish(void)
{
bool success = true;

-  if(mode != 0)
+  if(manager != 0)
{
-    success = dmconfig_action(mode);
+    success = dmconfig_action(manager);

-    mode = 0;
+    manager = 0;
}

return success;
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to