753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/*
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * CDDL HEADER START
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore *
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * The contents of this file are subject to the terms of the
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Common Development and Distribution License (the "License").
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * You may not use this file except in compliance with the License.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore *
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * or http://www.opensolaris.org/os/licensing.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * See the License for the specific language governing permissions
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * and limitations under the License.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore *
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * When distributing Covered Code, include this CDDL HEADER in each
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * If applicable, add the following below this CDDL HEADER, with the
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * fields enclosed by brackets "[]" replaced with your own identifying
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * information: Portions Copyright [yyyy] [name of copyright owner]
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore *
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * CDDL HEADER END
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/*
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Use is subject to license terms.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore */
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka/*
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#ifndef _GRBMIMPL_H
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define _GRBMIMPL_H
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#ifdef __cplusplus
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreextern "C" {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#endif
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#include <sys/types.h>
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#include <sys/param.h>
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#include <sys/mntent.h>
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#include <sys/uadmin.h>
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka#include <sys/dktp/fdisk.h>
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#include <libzfs.h>
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#include <libdevinfo.h>
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#include "libgrubmgmt.h"
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#include "libgrub_errno.h"
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/*
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Macros for processing the GRUB menu.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define GRUB_MENU "/boot/grub/menu.lst"
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define BOOTSIGN_DIR "/boot/grub/bootsign"
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define BOOTSIGN_LEN (2 * MAXNAMELEN)
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ZFS_BOOT_VAR "$ZFS-BOOTFS" /* ZFS boot option */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define ISADIR_VAR "$ISADIR" /* ISADIR option */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define PRTNUM_INVALID -1 /* Partition number invlaid */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define SLCNUM_INVALID -1 /* Slice number invalid */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define SLCNUM_FIRST 'a'
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define SLCNUM_WHOLE_DISK 'q'
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define IS_SLCNUM_VALID(x) ((x) >= SLCNUM_FIRST && (x) < SLCNUM_WHOLE_DISK)
01f9868a8d2cedd96c3aeefbd7233aa77f7b72ffMarcel Telka#define IS_PRTNUM_VALID(x) ((uint_t)(x) < FD_NUMPART + MAX_EXT_PARTS)
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define GRBM_VALID_FLAG ((uint_t)1 << 31)
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define GRBM_MAXLINE 8192
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define IS_ENTRY_VALID(ent) ((ent) && ((ent)->ge_flags & GRBM_VALID_FLAG))
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define IS_BARG_VALID(barg) ((barg)->gb_flags & GRBM_VALID_FLAG)
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define IS_ENTRY_BARG_VALID(ent) \
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore (IS_ENTRY_VALID(ent) && IS_BARG_VALID(&(ent)->ge_barg))
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define IS_LINE2BIG(buf, bfsz, len) \
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore ((len = strlen(buf)) == (bfsz) - 1 && (buf)[len - 1] != '\n')
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define IS_STR_NULL(x) ((x) == NULL ? "NULL" : (x))
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define GRUB_ENTRY_IS_XVM(fbarg) \
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore (strstr(fbarg.gba_kernel, "xen.gz") != NULL)
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreenum {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define menu_cmd(cmd, num, flags, parsef) num,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#define menu_cmd_end(num) num
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#include "libgrub_cmd.def"
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooretypedef struct _grub_fs {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore di_node_t gf_diroot;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore di_devlink_handle_t gf_dvlh;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore libzfs_handle_t *gf_lzfh;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore} grub_fs_t;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooretypedef struct _grub_cmd_desc {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore const char *gcd_cmd;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint_t gcd_num;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore int gcd_flags;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore} grub_cmd_desc_t;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreenum {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore GRBM_UFS = 0,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore GRBM_ZFS_TOPFS = 0,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore GRBM_FS_TOP = 0,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore GRBM_ZFS_BOOTFS,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore GRBM_FS_MAX
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooretypedef struct _grub_root {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore char gr_fstyp[MNTMAXSTR];
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore char gr_physpath[MAXPATHLEN];
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_fsdesc_t gr_fs[GRBM_FS_MAX];
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore} grub_root_t;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/*
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Data struct for the boot argument constructed from a GRUB menu entry
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooretypedef struct _grub_barg {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_entry_t *gb_entry;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_line_t *gb_errline;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore int gb_walkret; /* set to 0 when match found */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint_t gb_flags;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint_t gb_prtnum;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint_t gb_slcnum;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_root_t gb_root;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore char gb_bootsign[BOOTSIGN_LEN];
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore char gb_kernel[BOOTARGS_MAX];
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore char gb_module[BOOTARGS_MAX];
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore} grub_barg_t;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/* GRUB menu per-line classification */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreenum {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore GRUB_LINE_INVALID = 0,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore GRUB_LINE_EMPTY,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore GRUB_LINE_COMMENT,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore GRUB_LINE_GLOBAL,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore GRUB_LINE_ENTRY,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore GRUB_LINE_TITLE
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/*
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Data structures for menu.lst contents
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moorestruct grub_line {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_line_t *gl_next;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_line_t *gl_prev;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore int gl_line_num; /* Line number in menu.lst */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore int gl_entry_num; /* menu boot entry #. */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore /* GRUB_ENTRY_DEFAULT if none */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore int gl_flags;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint_t gl_cmdtp; /* recognized command type */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore char *gl_cmd;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore char *gl_sep;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore char *gl_arg;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore char *gl_line;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moorestruct grub_entry {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_menu_t *ge_menu; /* grub_menu_t it belongs to */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_entry_t *ge_next;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_entry_t *ge_prev;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_line_t *ge_start;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_line_t *ge_end;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore int ge_entry_num;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint_t ge_flags;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint_t ge_emask; /* invalid lines mask */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_barg_t ge_barg;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moorestruct grub_menu {
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_line_t *gm_start;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_line_t *gm_end;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_line_t *gm_curdefault; /* line containing default */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_entry_t *gm_ent_start; /* os entries */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_entry_t *gm_ent_end;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_entry_t *gm_ent_default; /* default entry */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint_t gm_line_num; /* number of lines processed */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore uint_t gm_entry_num; /* number of entries processed */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore char gm_path[MAXPATHLEN];
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_fs_t gm_fs;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore grub_root_t gm_root;
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore};
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/* File system helper functions */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint grub_current_root(grub_fs_t *, grub_root_t *);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooregrub_fsdesc_t *grub_get_rootfsd(const grub_root_t *);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint grub_fsd_mount_tmp(grub_fsdesc_t *, const char *);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moorevoid grub_fsd_umount_tmp(grub_fsdesc_t *);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint grub_fsd_get_mountp(grub_fsdesc_t *fsd, char *fstyp);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint grub_find_bootsign(grub_barg_t *barg);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/* GRUB menu parse functions */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint skip_line(const grub_line_t *lp, grub_barg_t *barg);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint error_line(const grub_line_t *lp, grub_barg_t *barg);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint kernel(const grub_line_t *lp, grub_barg_t *barg);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint module(const grub_line_t *lp, grub_barg_t *barg);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint dollar_kernel(const grub_line_t *lp, grub_barg_t *barg);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint dollar_module(const grub_line_t *lp, grub_barg_t *barg);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint findroot(const grub_line_t *lp, grub_barg_t *barg);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint bootfs(const grub_line_t *lp, grub_barg_t *barg);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooresize_t clean_path(char *path);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/* GRUB entry functions */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint grub_entry_construct_barg(grub_entry_t *ent);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreconst char *grub_entry_get_fstyp(const grub_entry_t *ent);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreconst char *grub_entry_get_kernel(const grub_entry_t *ent);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreconst char *grub_entry_get_module(const grub_entry_t *ent);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreconst grub_fsdesc_t *grub_entry_get_rootfs(const grub_entry_t *ent);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooresize_t grub_entry_get_cmdline(grub_entry_t *ent, char *cmdline, size_t size);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore/*
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * GRUB menu parse/access funcions.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore *
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Callers must call grub_menu_init() to to obtain a handle to the menu before
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * calling any of the other functions, and call grub_menu_fini() to close.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore *
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * grub_menu_init:
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Reads and parses GRUB menu file into a grub_menu_t data structure.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * If grub_menu_path file path is NULL, will use 'currently active'
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * GRUB menu file.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * grub_menu_fini:
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Frees all resources allocated by grub_menu_init().
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore *
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * grub_menu_get_entry:
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Returns a particular entry from the menu.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * grub_menu_next_entry:
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * grub_menu_prev_entry:
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Returns next or previous entry in the menu.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * If current entry is NULL, return first or last entry.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore *
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * grub_menu_next_line:
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * grub_menu_prev_line:
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Returns next/prev (to the current) line in the menu.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * If current line is NULL, returns first or last line.
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * grub_menu_get_line:
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore * Returns the specified line in the menu (line counter starts from one).
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore */
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooreint grub_menu_init(const char *grub_menu_path, grub_menu_t **menup);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moorevoid grub_menu_fini(grub_menu_t *);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooregrub_entry_t *grub_menu_get_entry(const grub_menu_t *menu, int num);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooregrub_entry_t *grub_menu_next_entry(const grub_menu_t *menu,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore const grub_entry_t *current);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooregrub_entry_t *grub_menu_prev_entry(const grub_menu_t *menu,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore const grub_entry_t *current);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooregrub_line_t *grub_menu_next_line(const grub_menu_t *menu,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore const grub_line_t *current);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Mooregrub_line_t *grub_menu_prev_line(const grub_menu_t *menu,
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore const grub_line_t *current);
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#ifdef __cplusplus
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore}
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#endif
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore
753a6d457b330b1b29b2d3eefcd0831116ce950dSherry Moore#endif /* _GRBMIMPL_H */