From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1Dofj7-0000uE-6J for mharc-grub-devel@gnu.org; Sat, 02 Jul 2005 07:00:02 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Dofix-0000s0-8s for grub-devel@gnu.org; Sat, 02 Jul 2005 06:59:51 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Dofit-0000qY-79 for grub-devel@gnu.org; Sat, 02 Jul 2005 06:59:47 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Dofis-0000X6-BI for grub-devel@gnu.org; Sat, 02 Jul 2005 06:59:46 -0400 Received: from [217.12.11.34] (helo=smtp003.mail.ukl.yahoo.com) by monty-python.gnu.org with smtp (Exim 4.34) id 1Dofez-0006vU-GM for grub-devel@gnu.org; Sat, 02 Jul 2005 06:55:45 -0400 Received: (qmail 47681 invoked from network); 2 Jul 2005 10:50:15 -0000 Received: from unknown (HELO ?192.168.0.2?) (subdino2004@83.203.224.64 with plain) by smtp003.mail.ukl.yahoo.com with SMTP; 2 Jul 2005 10:50:14 -0000 Message-ID: <42C67167.80304@yahoo.fr> Date: Sat, 02 Jul 2005 12:50:15 +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> <42C2C55F.9010203@yahoo.fr> <87irzwf9ix.fsf@student.han.nl> <42C3C8FC.6050600@yahoo.fr> <42C66A33.1090201@yahoo.fr> In-Reply-To: <42C66A33.1090201@yahoo.fr> X-Enigmail-Version: 0.91.0.0 Content-Type: multipart/mixed; boundary="------------040304090808000900000902" Subject: [PATCH v2] 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: Sat, 02 Jul 2005 10:59:54 -0000 This is a multi-part message in MIME format. --------------040304090808000900000902 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit -----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----- --------------040304090808000900000902 Content-Type: text/plain; name="cmp.c_2.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="cmp.c_2.diff" 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 #include #include +#include + +#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; } --------------040304090808000900000902-- ___________________________________________________________________________ Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger Téléchargez cette version sur http://fr.messenger.yahoo.com