diff options
author | Toomas Soome <tsoome@me.com> | 2015-06-05 16:11:03 +0300 |
---|---|---|
committer | Robert Mustacchi <rm@joyent.com> | 2016-09-22 11:43:41 -0700 |
commit | fa0c327afe484fa5ff164fb81ff93715dd6573f8 (patch) | |
tree | 350c265b4087fd961c809938ad6515f3ba0c91cf /usr/src/lib/libbe | |
parent | 9abc7a578aecf9064f46563361e8f856b4bdc35e (diff) | |
download | illumos-joyent-fa0c327afe484fa5ff164fb81ff93715dd6573f8.tar.gz |
6706 disable grub menu management in bootadm (loader project)
6707 disable grub menu management in libbe (loader project)
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Approved by: Robert Mustacchi <rm@joyent.com>
Diffstat (limited to 'usr/src/lib/libbe')
-rw-r--r-- | usr/src/lib/libbe/common/be_utils.c | 25 | ||||
-rw-r--r-- | usr/src/lib/libbe/common/libbe_priv.h | 2 |
2 files changed, 21 insertions, 6 deletions
diff --git a/usr/src/lib/libbe/common/be_utils.c b/usr/src/lib/libbe/common/be_utils.c index e63809c899..1d79c51a4f 100644 --- a/usr/src/lib/libbe/common/be_utils.c +++ b/usr/src/lib/libbe/common/be_utils.c @@ -405,16 +405,24 @@ be_get_defaults(struct be_defaults *defaults) { void *defp; + defaults->be_deflt_grub = B_FALSE; defaults->be_deflt_rpool_container = B_FALSE; defaults->be_deflt_bename_starts_with[0] = '\0'; if ((defp = defopen_r(BE_DEFAULTS)) != NULL) { const char *res = defread_r(BE_DFLT_BENAME_STARTS, defp); - if (res != NULL && res[0] != NULL) { + if (res != NULL && res[0] != '\0') { (void) strlcpy(defaults->be_deflt_bename_starts_with, res, ZFS_MAX_DATASET_NAME_LEN); defaults->be_deflt_rpool_container = B_TRUE; } + if (be_is_isa("i386")) { + res = defread_r(BE_DFLT_BE_HAS_GRUB, defp); + if (res != NULL && res[0] != '\0') { + if (strcasecmp(res, "true") == 0) + defaults->be_deflt_grub = B_TRUE; + } + } defclose_r(defp); } } @@ -3116,11 +3124,16 @@ be_err_to_str(int err) boolean_t be_has_grub(void) { - /* - * TODO: This will need to be expanded to check for the existence of - * grub if and when there is grub support for SPARC. - */ - return (be_is_isa("i386")); + static struct be_defaults be_defaults; + static boolean_t be_deflts_set = B_FALSE; + + /* Cache the defaults, because be_has_grub is used often. */ + if (be_deflts_set == B_FALSE) { + be_get_defaults(&be_defaults); + be_deflts_set = B_TRUE; + } + + return (be_defaults.be_deflt_grub); } /* diff --git a/usr/src/lib/libbe/common/libbe_priv.h b/usr/src/lib/libbe/common/libbe_priv.h index a9c464dc69..d9cb964c25 100644 --- a/usr/src/lib/libbe/common/libbe_priv.h +++ b/usr/src/lib/libbe/common/libbe_priv.h @@ -42,6 +42,7 @@ extern "C" { #define BE_AUTO_NAME_DELIM '-' #define BE_DEFAULTS "/etc/default/be" #define BE_DFLT_BENAME_STARTS "BENAME_STARTS_WITH=" +#define BE_DFLT_BE_HAS_GRUB "BE_HAS_GRUB=" #define BE_CONTAINER_DS_NAME "ROOT" #define BE_DEFAULT_CONSOLE "text" #define BE_POLICY_PROPERTY "org.opensolaris.libbe:policy" @@ -137,6 +138,7 @@ typedef struct be_plcy_list { struct be_defaults { boolean_t be_deflt_rpool_container; + boolean_t be_deflt_grub; char be_deflt_bename_starts_with[ZFS_MAX_DATASET_NAME_LEN]; }; |