# New Ticket Created by Nick Glencross # Please include the string: [perl #34637] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=34637 >
A small patch to: * Give Jens credit for yesterday's enhancements (I think that I'm right in attributing them to you) * A small fix to the autoload function * Remove duplicate code between _md5_hex and _md5_print * A couple of internal function renames (more for consistency than anything) All tests still pass. Thanks, Nick
Index: runtime/parrot/library/Digest/MD5.imc =================================================================== RCS file: /cvs/public/parrot/runtime/parrot/library/Digest/MD5.imc,v retrieving revision 1.3 diff -c -r1.3 MD5.imc *** runtime/parrot/library/Digest/MD5.imc 31 Mar 2005 12:20:39 -0000 1.3 --- runtime/parrot/library/Digest/MD5.imc 1 Apr 2005 12:09:05 -0000 *************** *** 1,5 **** # Parrot md5sum; Nick Glencross <[EMAIL PROTECTED]> ! # Improvements from Leo # # Based on md5.c, from md5sum # written by Ulrich Drepper <[EMAIL PROTECTED]>, 1995. --- 1,5 ---- # Parrot md5sum; Nick Glencross <[EMAIL PROTECTED]> ! # Improvements from Leo and Jens Rieks # # Based on md5.c, from md5sum # written by Ulrich Drepper <[EMAIL PROTECTED]>, 1995. *************** *** 14,19 **** --- 14,25 ---- $P0 = _md5sum("foo") _md5_print($P0) + or + + load_bytecode "library/Digest/MD5.imc" + $P0 = _md5sum("bar") + $S0 = _md5_hex($P0) + =head1 DESCRIPTION This is a pure Parrot MD5 hash routine. Therefore you should run it *************** *** 25,38 **** Pass in a string, returns an Integer array with the result - =head2 _md5_print - - Pass it the Integer array to print the checksum. - =head2 _md5_hex Pass it the Integer array to get the checksum as string. =head1 BUGS Only tested so far on i386. --- 31,44 ---- Pass in a string, returns an Integer array with the result =head2 _md5_hex Pass it the Integer array to get the checksum as string. + =head2 _md5_print + + Pass it the Integer array to print the checksum. + =head1 BUGS Only tested so far on i386. *************** *** 47,60 **** =cut ! #################################### ! # export function entries to globals .sub onload @LOAD .local pmc endian endian = new Integer endian = 0 - store_global "Digest", "_md5_swap_endian", endian $P0 = _config() --- 53,65 ---- =cut ! ########################################################################### ! # Export function entries to globals .sub onload @LOAD .local pmc endian endian = new Integer endian = 0 $P0 = _config() *************** *** 74,86 **** is_little_endian: .local pmc f f = find_global "Digest", "_md5sum" global "_md5sum" = f - f = find_global "Digest", "_md5_print" - global "_md5_print" = f f = find_global "Digest", "_md5_hex" global "_md5_hex" = f .end .include "library/config.imc" --- 79,93 ---- is_little_endian: + store_global "Digest", "_md5_swap_endian", endian + .local pmc f f = find_global "Digest", "_md5sum" global "_md5sum" = f f = find_global "Digest", "_md5_hex" global "_md5_hex" = f + f = find_global "Digest", "_md5_print" + global "_md5_print" = f .end .include "library/config.imc" *************** *** 103,110 **** $I0 = $P0 _md5_create_buffer (str, buffer, $I0) - # _print_buffer (buffer, 8) - _md5_init (context) _md5_process_buffer (context, buffer) --- 110,115 ---- *************** *** 132,138 **** .endm .macro FH (b,c,d) ! tmp = .b ~ .c tmp = tmp ~ .d .endm --- 137,143 ---- .endm .macro FH (b,c,d) ! tmp = .b ~ .c tmp = tmp ~ .d .endm *************** *** 215,221 **** .end ########################################################################### - # Create a buffer from the requested buffer .sub _md5_create_buffer --- 220,225 ---- *************** *** 267,273 **** inc subcounter if subcounter != 4 goto md5_create_buffer_loop if endian goto endian_ok ! .swap (word) endian_ok: --- 271,277 ---- inc subcounter if subcounter != 4 goto md5_create_buffer_loop if endian goto endian_ok ! .swap (word) endian_ok: *************** *** 421,427 **** context[2] = C context[3] = D ! # $S0 = _format_vals (A,B,C,D) # print $S0 # print "\n" --- 425,431 ---- context[2] = C context[3] = D ! # $S0 = _md5_format_vals (A,B,C,D) # print $S0 # print "\n" *************** *** 429,437 **** ########################################################################### ! # format four hex values ! .sub _format_vals .param int A .param int B .param int C --- 433,441 ---- ########################################################################### ! # Format four hex values ! .sub _md5_format_vals .param int A .param int B .param int C *************** *** 450,464 **** ########################################################################### ! # Print the final checksum ! .sub _md5_print .param pmc context ! .local int A ! .local int B ! .local int C ! .local int D A = context[0] B = context[1] --- 454,465 ---- ########################################################################### ! # Retrieve the final checksum ! .sub _md5_hex .param pmc context ! .local int A, B, C, D A = context[0] B = context[1] *************** *** 475,516 **** dont_swap: ! $S0 = _format_vals (A,B,C,D) ! print $S0 .end ! .sub _md5_hex ! .param pmc context ! ! .local int A ! .local int B ! .local int C ! .local int D ! ! A = context[0] ! B = context[1] ! C = context[2] ! D = context[3] ! ! $P0 = find_global "Digest", "_md5_swap_endian" ! if $P0 goto dont_swap ! ! .swap (A) ! .swap (B) ! .swap (C) ! .swap (D) ! dont_swap: ! $S0 = _format_vals (A,B,C,D) ! .return($S0) .end ########################################################################### # For debugging ! .sub _print_buffer .param pmc buffer .param int word_size --- 476,499 ---- dont_swap: ! $S0 = _md5_format_vals (A,B,C,D) ! .return($S0) .end ! # Convenience subroutine ! .sub _md5_print ! .param pmc context ! $S0 = _md5_hex (context) ! print $S0 .end ########################################################################### # For debugging ! .sub _md5_print_buffer .param pmc buffer .param int word_size *************** *** 526,532 **** print_buffer_loop: if counter >= size goto print_buffer_done value = buffer[counter] ! $S0 = _number_as_hex (value, word_size) print $S0 print " | " counter = counter + 1 --- 509,515 ---- print_buffer_loop: if counter >= size goto print_buffer_done value = buffer[counter] ! $S0 = _md5_number_as_hex (value, word_size) print $S0 print " | " counter = counter + 1 *************** *** 542,548 **** # Also for debugging ! .sub _number_as_hex .param int number .param int word_size --- 525,531 ---- # Also for debugging ! .sub _md5_number_as_hex .param int number .param int word_size