2008-07-27 Bean <bean123ch@gmail.com>

* commands/crc.c: New file.

	* lib/crc.c: Likewise.

	* include/grub/lib/crc.h: Likewise.

	* util/grub-fstest.c: grub/hexdump.h => grub/lib/hexdump.h.

	* commands/hexdump.c: grub/hexdump.h => grub/lib/hexdump.h.
	(hexdump): Move this function to ...

	* lib/hexdump.c: ... here.

	* include/grub/hexdump.h: Renamed to ...

	* include/grub/lib/hexdump.h: ... this.

	* commands/loadenv.c: grub/envblk.h => grub/lib/envblk.h

	* util/grub-editenv.c: Likewise.

	* include/envblk.h: Renamed to ...

	* include/lib/envblk.h: ... this.

	* util/envblk.c: Renamed to ...

	* lib/envblk.c: ... this.

	* conf/common.rmk (grub_fstest_SOURCES): commands/hexdump.c =>
	lib/hexdump.c.
	(grub_editenv_SOURCES): util/envblk.c => lib/envblk.c
	(pkglib_MODULES): Add crc.mod.
	(hexdump_mod_SOURCES): Add lib/hexdump.c.
	(loadenv_mod_SOURCES): util/envblk.c => lib/envblk.c.
	(crc_mod_SOURCES): New macro.
	(crc_mod_CFLAGS): Likewise.
	(crc_mod_LDFLAGS): Likewise.

	* conf/i386-coreboot.rmk (grub_emu_SOURCES): Add lib/hexdump.c.

	* conf/i386-efi.rmk (grub_emu_SOURCES): Likewise.

	* conf/i386-pc.rmk (grub_emu_SOURCES): Likewise.

	* conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Likewise.

	* conf/x86_64-efi.rmk (grub_emu_SOURCES): Likewise.
This commit is contained in:
bean 2008-07-27 13:51:30 +00:00
parent 8749e9e524
commit a85cd5a0b5
26 changed files with 479 additions and 125 deletions

66
commands/crc.c Normal file
View file

@ -0,0 +1,66 @@
/* crc.c - command to calculate the crc32 checksum of a file */
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2008 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 <http://www.gnu.org/licenses/>.
*/
#include <grub/normal.h>
#include <grub/dl.h>
#include <grub/arg.h>
#include <grub/disk.h>
#include <grub/file.h>
#include <grub/misc.h>
#include <grub/lib/crc.h>
static grub_err_t
grub_cmd_crc (struct grub_arg_list *state __attribute__ ((unused)),
int argc, char **args)
{
grub_file_t file;
char buf[GRUB_DISK_SECTOR_SIZE];
grub_ssize_t size;
grub_uint32_t crc;
if (argc != 1)
return grub_error (GRUB_ERR_BAD_ARGUMENT, "file name required");
file = grub_file_open (args[0]);
if (! file)
return 0;
crc = 0;
while ((size = grub_file_read (file, buf, sizeof (buf))) > 0)
crc = grub_getcrc32 (crc, buf, size);
grub_file_close (file);
grub_printf ("%08x\n", crc);
return 0;
}
GRUB_MOD_INIT(crc)
{
(void) mod; /* To stop warning. */
grub_register_command ("crc", grub_cmd_crc, GRUB_COMMAND_FLAG_BOTH,
"crc FILE", "Calculate the crc32 checksum of a file.", 0);
}
GRUB_MOD_FINI(crc)
{
grub_unregister_command ("crc");
}

View file

@ -24,8 +24,8 @@
#include <grub/disk.h>
#include <grub/misc.h>
#include <grub/gzio.h>
#include <grub/hexdump.h>
#include <grub/partition.h>
#include <grub/lib/hexdump.h>
static const struct grub_arg_option options[] = {
{"skip", 's', 0, "skip offset bytes from the beginning of file.", 0,
@ -34,52 +34,6 @@ static const struct grub_arg_option options[] = {
{0, 0, 0, 0, 0, 0}
};
void
hexdump (unsigned long bse, char *buf, int len)
{
int pos;
char line[80];
while (len > 0)
{
int cnt, i;
pos = grub_sprintf (line, "%08lx ", bse);
cnt = 16;
if (cnt > len)
cnt = len;
for (i = 0; i < cnt; i++)
{
pos += grub_sprintf (&line[pos], "%02x ", (unsigned char) buf[i]);
if ((i & 7) == 7)
line[pos++] = ' ';
}
for (; i < 16; i++)
{
pos += grub_sprintf (&line[pos], " ");
if ((i & 7) == 7)
line[pos++] = ' ';
}
line[pos++] = '|';
for (i = 0; i < cnt; i++)
line[pos++] = ((buf[i] >= 32) && (buf[i] < 127)) ? buf[i] : '.';
line[pos++] = '|';
line[pos] = 0;
grub_printf ("%s\n", line);
bse += 16;
buf += 16;
len -= cnt;
}
}
static grub_err_t
grub_cmd_hexdump (struct grub_arg_list *state, int argc, char **args)
{

View file

@ -25,8 +25,8 @@
#include <grub/disk.h>
#include <grub/misc.h>
#include <grub/env.h>
#include <grub/envblk.h>
#include <grub/partition.h>
#include <grub/lib/envblk.h>
static const struct grub_arg_option options[] =
{