summaryrefslogtreecommitdiff
path: root/usr/src/lib/libbe
diff options
context:
space:
mode:
authorToomas Soome <tsoome@me.com>2015-06-05 16:11:03 +0300
committerRobert Mustacchi <rm@joyent.com>2016-09-22 11:43:41 -0700
commitfa0c327afe484fa5ff164fb81ff93715dd6573f8 (patch)
tree350c265b4087fd961c809938ad6515f3ba0c91cf /usr/src/lib/libbe
parent9abc7a578aecf9064f46563361e8f856b4bdc35e (diff)
downloadillumos-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.c25
-rw-r--r--usr/src/lib/libbe/common/libbe_priv.h2
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];
};