From: Peter Lustig Date: Mon, 4 Nov 2013 00:47:37 +0000 (+0100) Subject: * grub-core/commands/i386/nthibr.c: New command. X-Git-Tag: grub-2.02-beta1~494 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9b5d4eed31d869cea0d024ca1f039338fa60bd8d;p=thirdparty%2Fgrub.git * grub-core/commands/i386/nthibr.c: New command. --- diff --git a/ChangeLog b/ChangeLog index 4d019887c..d83763de9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-11-04 Peter Lustig + + * grub-core/commands/i386/nthibr.c: New command. + 2013-11-04 Vladimir Serbinenko * grub-core/tests/video_checksum.c: Add 2560x1440 mode to testing. diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def index 036113b20..0878f0102 100644 --- a/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def @@ -576,6 +576,11 @@ module = { enable = mips_arc; }; +module = { + name = check_nt_hiberfil; + common = commands/i386/nthibr.c; +}; + library = { name = libgnulib.a; common = gnulib/regex.c; diff --git a/grub-core/commands/i386/nthibr.c b/grub-core/commands/i386/nthibr.c new file mode 100644 index 000000000..7f3e06197 --- /dev/null +++ b/grub-core/commands/i386/nthibr.c @@ -0,0 +1,79 @@ +/* nthibr.c - tests whether an MS Windows system partition is hibernated */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2013 Peter Lustig + * Copyright (C) 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 + +GRUB_MOD_LICENSE ("GPLv3+"); + +static grub_err_t +grub_cmd_nthibr (grub_command_t cmd __attribute__ ((unused)), + int argc, char **args) +{ + grub_uint8_t hibr_file_magic[4]; + grub_file_t hibr_file = 0; + + if (argc != 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected")); + + hibr_file = grub_file_open (args[0]); + if (!hibr_file) + return grub_errno; + + /* Try to read magic number of 'hiberfil.sys' */ + if (grub_file_read (hibr_file, hibr_file_magic, + sizeof (hibr_file_magic)) + != (grub_ssize_t) sizeof (hibr_file_magic)) + { + if (!grub_errno) + grub_error (GRUB_ERR_TEST_FAILURE, "false"); + goto exit; + } + + if (!(grub_memcmp ("hibr", hibr_file_magic, sizeof (hibr_file_magic)) == 0 + || grub_memcmp ("HIBR", hibr_file_magic, sizeof (hibr_file_magic)) == 0)) + grub_error (GRUB_ERR_TEST_FAILURE, "false"); + + exit: + grub_file_close (hibr_file); + + return grub_errno; +} + +static grub_command_t cmd; + +GRUB_MOD_INIT (check_nt_hiberfil) +{ + cmd = grub_register_command ("check_nt_hibrerfil", grub_cmd_nthibr, + N_("FILE"), + N_("Test whether a hiberfil.sys is " + "in hibernated state.")); +} + +GRUB_MOD_FINI (check_nt_hiberfil) +{ + grub_unregister_command (cmd); +}