From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1Dnf6l-0005wH-6Y for mharc-grub-devel@gnu.org; Wed, 29 Jun 2005 12:08:15 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Dnf6c-0005ra-CY for grub-devel@gnu.org; Wed, 29 Jun 2005 12:08:06 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Dnf6T-0005mN-5l for grub-devel@gnu.org; Wed, 29 Jun 2005 12:08:01 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Dnf6S-0005hp-LI for grub-devel@gnu.org; Wed, 29 Jun 2005 12:07:56 -0400 Received: from [217.12.11.34] (helo=smtp003.mail.ukl.yahoo.com) by monty-python.gnu.org with smtp (Exim 4.34) id 1Dnf2s-0004rH-80 for grub-devel@gnu.org; Wed, 29 Jun 2005 12:04:14 -0400 Received: (qmail 39771 invoked from network); 29 Jun 2005 15:59:23 -0000 Received: from unknown (HELO ?192.168.0.2?) (subdino2004@83.194.164.58 with plain) by smtp003.mail.ukl.yahoo.com with SMTP; 29 Jun 2005 15:59:22 -0000 Message-ID: <42C2C55F.9010203@yahoo.fr> Date: Wed, 29 Jun 2005 17:59:27 +0200 From: Vincent Pelletier User-Agent: Debian Thunderbird 1.0.2 (X11/20050602) X-Accept-Language: en-us, en MIME-Version: 1.0 To: The development of GRUB 2 References: <20050629083358.250134cc@localhost> <42C2BC69.8080102@yahoo.fr> In-Reply-To: <42C2BC69.8080102@yahoo.fr> X-Enigmail-Version: 0.91.0.0 Content-Type: multipart/mixed; boundary="------------060501060409010707070301" Subject: [PATCH] grub2: commands/cmp.c: grub_cmd_cmp() X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jun 2005 16:08:08 -0000 This is a multi-part message in MIME format. --------------060501060409010707070301 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Vincent Pelletier wrote: > nb: I haven't tested these changes beyond "make", but I think they are > trivial enough to be trusted... My baaad... There were 2 bugs left : - -If the file size isn't a multiple of 512 bytes, we would read non-initialised or non-updated memory (so it only affects results on files whom size is < 512) - -"The files are identical." is displayed when file size differ (was corrected in Wanderley's version) Reminds me Hagakure : "Matters of small concern should be considered seriously". I'm not sure if it is right to add a macro definition for block size, and wether the name is good. 2005-06-29 Vincent Pelletier * commands/cmp.c (grub_cmd_cmp): Close the right file at the right time. Compare only data just read. Don't report files of different size as identical. (BLOCK_SIZE): New macro. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) iD8DBQFCwsVfFEQoKRQyjtURApNOAKC4bO41ca3vX/m64aIy4hIvjIwW1QCgmbyg AIn3yvP072FMa0LlDFo1CYM= =o8fq -----END PGP SIGNATURE----- --------------060501060409010707070301 Content-Type: text/plain; name="cmp.c.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="cmp.c.diff" Index: commands/cmp.c =================================================================== RCS file: /cvsroot/grub/grub2/commands/cmp.c,v retrieving revision 1.2 diff -u -p -r1.2 cmp.c --- commands/cmp.c 4 Apr 2004 13:46:00 -0000 1.2 +++ commands/cmp.c 29 Jun 2005 15:47:36 -0000 @@ -24,6 +24,8 @@ #include #include +#define BLOCK_SIZE 512 + static grub_err_t grub_cmd_cmp (struct grub_arg_list *state __attribute__ ((unused)), int argc, char **args) @@ -44,54 +46,53 @@ grub_cmd_cmp (struct grub_arg_list *stat file2 = grub_file_open (args[1]); if (! file2) { - grub_file_close (file2); + grub_file_close (file1); return grub_errno; } if (grub_file_size (file1) != grub_file_size (file2)) - grub_printf ("Differ in size: %d [%s], %d [%s]\n", - grub_file_size (file1), args[0], - grub_file_size (file2), args[1]); + { + grub_printf ("Differ in size: %d [%s], %d [%s]\n", + grub_file_size (file1), args[0], + grub_file_size (file2), args[1]); + } else { - char buf1[512]; - char buf2[512]; + char buf1[BLOCK_SIZE]; + char buf2[BLOCK_SIZE]; grub_ssize_t rd1, rd2; grub_uint32_t pos = 0; do { int i; - rd1 = grub_file_read (file1, buf1, 512); - rd2 = grub_file_read (file2, buf2, 512); + rd1 = grub_file_read (file1, buf1, BLOCK_SIZE); + rd2 = grub_file_read (file2, buf2, BLOCK_SIZE); if (rd1 != rd2) - return 0; + goto cleanup; - for (i = 0; i < 512; i++) + for (i = 0; i < rd1; 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 += BLOCK_SIZE; } while (rd2); + grub_printf ("The files are identical.\n"); } +cleanup: grub_file_close (file1); grub_file_close (file2); - grub_printf ("The files are identical.\n"); - return 0; } --------------060501060409010707070301-- ___________________________________________________________________________ Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger Téléchargez cette version sur http://fr.messenger.yahoo.com