diff --git a/ChangeLog b/ChangeLog index 7575597b6..ebc7ad126 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-10-15 Vladimir Serbinenko + + * util/grub-editenv.c (create_envblk_file): More from here ... + * util/editenv.c (grub_util_create_envblk_file): ... to here. + 2013-10-15 Vladimir Serbinenko * grub-core/osdep/unix/getroot.c (grub_guess_root_devices): diff --git a/Makefile.util.def b/Makefile.util.def index ea1d05800..145dabc5e 100644 --- a/Makefile.util.def +++ b/Makefile.util.def @@ -213,6 +213,7 @@ program = { mansection = 1; common = util/grub-editenv.c; + common = util/editenv.c; common = grub-core/osdep/init.c; ldadd = libgrubmods.a; diff --git a/include/grub/util/install.h b/include/grub/util/install.h index bcce6b278..e12ed8667 100644 --- a/include/grub/util/install.h +++ b/include/grub/util/install.h @@ -76,4 +76,7 @@ grub_install_get_blocklist (grub_device_t root_dev, void *data), void *hook_data); +void +grub_util_create_envblk_file (const char *name); + #endif diff --git a/util/editenv.c b/util/editenv.c new file mode 100644 index 000000000..919016e18 --- /dev/null +++ b/util/editenv.c @@ -0,0 +1,63 @@ +/* editenv.c - tool to edit environment block. */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2008,2009,2010,2013 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see . + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define DEFAULT_ENVBLK_SIZE 1024 + +void +grub_util_create_envblk_file (const char *name) +{ + FILE *fp; + char *buf; + char *namenew; + + buf = xmalloc (DEFAULT_ENVBLK_SIZE); + + namenew = xasprintf ("%s.new", name); + fp = grub_util_fopen (namenew, "wb"); + if (! fp) + grub_util_error (_("cannot open `%s': %s"), namenew, + strerror (errno)); + + memcpy (buf, GRUB_ENVBLK_SIGNATURE, sizeof (GRUB_ENVBLK_SIGNATURE) - 1); + memset (buf + sizeof (GRUB_ENVBLK_SIGNATURE) - 1, '#', + DEFAULT_ENVBLK_SIZE - sizeof (GRUB_ENVBLK_SIGNATURE) + 1); + + if (fwrite (buf, 1, DEFAULT_ENVBLK_SIZE, fp) != DEFAULT_ENVBLK_SIZE) + grub_util_error (_("cannot write to `%s': %s"), namenew, + strerror (errno)); + + fsync (fileno (fp)); + free (buf); + fclose (fp); + + if (rename (namenew, name) < 0) + grub_util_error (_("cannot rename the file %s to %s"), namenew, name); + free (namenew); +} diff --git a/util/grub-editenv.c b/util/grub-editenv.c index 43ad0eaf6..50be77818 100644 --- a/util/grub-editenv.c +++ b/util/grub-editenv.c @@ -23,7 +23,8 @@ #include #include #include -#include +#include +#include #include #include @@ -33,7 +34,6 @@ #include "progname.h" -#define DEFAULT_ENVBLK_SIZE 1024 #define DEFAULT_ENVBLK_PATH DEFAULT_DIRECTORY "/" GRUB_ENVBLK_DEFCFG static struct argp_option options[] = { @@ -109,38 +109,6 @@ If FILENAME is `-', the default value %s is used."), NULL, help_filter, NULL }; -static void -create_envblk_file (const char *name) -{ - FILE *fp; - char *buf; - char *namenew; - - buf = xmalloc (DEFAULT_ENVBLK_SIZE); - - namenew = xasprintf ("%s.new", name); - fp = grub_util_fopen (namenew, "wb"); - if (! fp) - grub_util_error (_("cannot open `%s': %s"), namenew, - strerror (errno)); - - memcpy (buf, GRUB_ENVBLK_SIGNATURE, sizeof (GRUB_ENVBLK_SIGNATURE) - 1); - memset (buf + sizeof (GRUB_ENVBLK_SIGNATURE) - 1, '#', - DEFAULT_ENVBLK_SIZE - sizeof (GRUB_ENVBLK_SIGNATURE) + 1); - - if (fwrite (buf, 1, DEFAULT_ENVBLK_SIZE, fp) != DEFAULT_ENVBLK_SIZE) - grub_util_error (_("cannot write to `%s': %s"), namenew, - strerror (errno)); - - fsync (fileno (fp)); - free (buf); - fclose (fp); - - if (rename (namenew, name) < 0) - grub_util_error (_("cannot rename the file %s to %s"), namenew, name); - free (namenew); -} - static grub_envblk_t open_envblk_file (const char *name) { @@ -153,7 +121,7 @@ open_envblk_file (const char *name) if (! fp) { /* Create the file implicitly. */ - create_envblk_file (name); + grub_util_create_envblk_file (name); fp = grub_util_fopen (name, "rb"); if (! fp) grub_util_error (_("cannot open `%s': %s"), name, @@ -299,7 +267,7 @@ main (int argc, char *argv[]) } if (strcmp (command, "create") == 0) - create_envblk_file (filename); + grub_util_create_envblk_file (filename); else if (strcmp (command, "list") == 0) list_variables (filename); else if (strcmp (command, "set") == 0)