Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=fvbe.git;a=commitdiff;h=29e74f4e68b0d6a704bce9d60638e22ebc3268ca
commit 29e74f4e68b0d6a704bce9d60638e22ebc3268ca Author: James Buren <[email protected]> Date: Sun Aug 25 19:02:51 2013 -0500 dmconfig: add systemd calls for changing DMs diff --git a/src/dmconfig.c b/src/dmconfig.c index 2f728c0..3a4bf09 100644 --- a/src/dmconfig.c +++ b/src/dmconfig.c @@ -55,7 +55,7 @@ static bool dmconfig_setup_managers(void) } -static bool dmconfig_symlink_target(void) +static bool 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"; @@ -75,12 +75,12 @@ static bool dmconfig_symlink_target(void) return true; } -static bool dmconfig_update_via_old(void) +static bool update_via_old(void) { char old[PATH_MAX] = {0}; char *new = "etc/systemd/system/display-manager.service"; - if(!dmconfig_symlink_target()) + if(!symlink_target()) return false; if(strcmp(manager,"none") != 0) @@ -101,6 +101,57 @@ static bool dmconfig_update_via_old(void) return true; } +static bool update_via_new(void) +{ + char old[PATH_MAX] = {0}; + char new[PATH_MAX] = {0}; + char command[_POSIX_ARG_MAX] = {0}; + + if(!symlink_target()) + return false; + + if(readlink0("etc/systemd/system/display-manager.service",old,sizeof(old))) + { + char *s = strrchr(old,'/'); + char *e = (s != 0) ? s + strlen(s) : 0; + + // +1 to include null terminator in the memmove(). + if(s != 0 && e != 0) + memmove(old,s,e-s+1); + } + else + *old = 0; + + if(strcmp(manager,"none") != 0) + strfcpy(new,sizeof(new),"%s.service",manager); + + if(strlen(old) > 0) + { + strfcpy(command,sizeof(command),"systemctl disable %s",old); + + if(!execute(command,g->guestroot,0)) + return false; + } + + if(strlen(new) > 0) + { + strfcpy(command,sizeof(command),"systemctl enable %s",new); + + if(!execute(command,g->guestroot,0)) + return false; + } + + return true; +} + +static bool dmconfig_action(void) +{ + if(g->insetup) + return update_via_old(); + + return update_via_new(); +} + static bool dmconfig_start(void) { if(!dmconfig_setup_managers()) @@ -118,11 +169,18 @@ static bool dmconfig_finish(void) if(manager != 0) { - success = dmconfig_action(manager); + success = dmconfig_action(); manager = 0; } + if(managers != 0) + { + charpp_free(managers); + + managers = 0; + } + return success; } _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
