From: Vincent Pelletier <subdino2004@yahoo.fr>
To: The development of GRUB 2 <grub-devel@gnu.org>
Subject: [PATCH v2] commands/cmp.c: grub_cmd_cmp()
Date: Sat, 02 Jul 2005 12:50:15 +0200 [thread overview]
Message-ID: <42C67167.80304@yahoo.fr> (raw)
In-Reply-To: <42C66A33.1090201@yahoo.fr>
[-- Attachment #1: Type: text/plain, Size: 261 bytes --]
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
(hum)
Vincent Pelletier
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)
iD8DBQFCxnFnFEQoKRQyjtURAp6rAJ9bk6yTKM+px9Ikh+4ByzT+Q01c/gCeLVJ1
3YHNI5TDbln9u0Aoz5i9R4M=
=jdzU
-----END PGP SIGNATURE-----
[-- Attachment #2: cmp.c_2.diff --]
[-- Type: text/plain, Size: 2819 bytes --]
Index: cmp.c
===================================================================
RCS file: /cvsroot/grub/grub2/commands/cmp.c,v
retrieving revision 1.2
diff -u -p -r1.2 cmp.c
--- cmp.c 4 Apr 2004 13:46:00 -0000 1.2
+++ cmp.c 2 Jul 2005 10:10:40 -0000
@@ -23,13 +23,21 @@
#include <grub/arg.h>
#include <grub/misc.h>
#include <grub/file.h>
+#include <grub/mm.h>
+
+#define BUFFER_SIZE 512
static grub_err_t
grub_cmd_cmp (struct grub_arg_list *state __attribute__ ((unused)),
int argc, char **args)
{
- grub_file_t file1;
- grub_file_t file2;
+ grub_err_t err;
+ grub_ssize_t rd1, rd2;
+ grub_uint32_t pos;
+ grub_file_t file1 = 0;
+ grub_file_t file2 = 0;
+ char *buf1 = 0;
+ char *buf2 = 0;
if (argc != 2)
return grub_error (GRUB_ERR_BAD_ARGUMENT, "two arguments required");
@@ -37,16 +45,9 @@ grub_cmd_cmp (struct grub_arg_list *stat
grub_printf ("Compare `%s' and `%s':\n", args[0],
args[1]);
- file1 = grub_file_open (args[0]);
- if (! file1)
- return grub_errno;
-
- file2 = grub_file_open (args[1]);
- if (! file2)
- {
- grub_file_close (file2);
- return grub_errno;
- }
+ if (! (file1 = grub_file_open (args[0]) ) ||
+ ! (file2 = grub_file_open (args[1]) ) )
+ goto cleanup;
if (grub_file_size (file1) != grub_file_size (file2))
grub_printf ("Differ in size: %d [%s], %d [%s]\n",
@@ -55,44 +56,48 @@ grub_cmd_cmp (struct grub_arg_list *stat
else
{
- char buf1[512];
- char buf2[512];
- grub_ssize_t rd1, rd2;
- grub_uint32_t pos = 0;
-
+ pos = 0;
+
+ if (! (buf1 = (char *) grub_malloc (BUFFER_SIZE) ) ||
+ ! (buf2 = (char *) grub_malloc (BUFFER_SIZE) ) )
+ goto cleanup;
do
{
int i;
- rd1 = grub_file_read (file1, buf1, 512);
- rd2 = grub_file_read (file2, buf2, 512);
+ rd1 = grub_file_read (file1, buf1, BUFFER_SIZE);
+ rd2 = grub_file_read (file2, buf2, BUFFER_SIZE);
if (rd1 != rd2)
- return 0;
+ goto cleanup;
- for (i = 0; i < 512; i++)
+ for (i = 0; i < rd2; i++)
{
if (buf1[i] != buf2[i])
{
grub_printf ("Differ at the offset %d: 0x%x [%s], 0x%x [%s]\n",
i + pos, buf1[i], args[0],
buf2[i], args[1]);
-
- grub_file_close (file1);
- grub_file_close (file2);
- return 0;
+ goto cleanup;
}
}
- pos += 512;
+ pos += BUFFER_SIZE;
} while (rd2);
+ grub_printf ("The files are identical.\n");
}
- grub_file_close (file1);
- grub_file_close (file2);
-
- grub_printf ("The files are identical.\n");
+cleanup:
+ err=grub_errno;
+ if (buf1)
+ grub_free (buf1);
+ if (buf2)
+ grub_free (buf2);
+ if (file1)
+ grub_file_close (file1);
+ if (file2)
+ grub_file_close (file2);
- return 0;
+ return err;
}
\f
next prev parent reply other threads:[~2005-07-02 11:00 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-06-29 11:33 grub2: commands/cmp.c: grub_cmd_cmp() Rodrigo Steinmüller Wanderley
2005-06-29 14:57 ` Hollis Blanchard
2005-06-29 15:21 ` [Bulk] " Vincent Pelletier
2005-06-29 15:59 ` [PATCH] " Vincent Pelletier
2005-06-30 10:01 ` Marco Gerards
2005-06-30 10:27 ` [Bulk] " Vincent Pelletier
2005-07-02 10:19 ` [Bulk] " Vincent Pelletier
2005-07-02 10:50 ` Vincent Pelletier [this message]
2005-06-30 0:09 ` [Bulk] " Rodrigo Steinmüller Wanderley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=42C67167.80304@yahoo.fr \
--to=subdino2004@yahoo.fr \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.