All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.