comparison src/md5.c @ 800:a5954632b187

[xemacs-hg @ 2002-03-31 08:27:14 by ben] more fixes, first crack at finishing behavior implementation TODO.ben-mule-21-5: Update. configure.in: Fix for new error-checking types. make-mswin-unicode.pl: Don't be fucked up by CRLF. Output code to force errors when nonintercepted Windows calls issued. behavior.el, dumped-lisp.el, menubar-items.el: Add support for saving using custom. Load into a dumped XEmacs. Correct :title to :short-doc in accordance with behavior-defs.el. Add a submenu under Options for turning on/off behaviors. cl-macs.el: Properly document `loop'. Fix a minor bug in keymap iteration and add support for bit-vector iteration. lisp-mode.el: Rearrange and add items for macro expanding. menubar-items.el: Document connection between these two functions. window.el: Port stuff from GNU 21.1. config.inc.samp, xemacs.mak: Separate out and add new variable for controlling error-checking. s/windowsnt.h: Use new ERROR_CHECK_ALL; not related to DEBUG_XEMACS. alloc.c, backtrace.h, buffer.c, buffer.h, bytecode.c, callproc.c, casetab.c, charset.h, chartab.c, cmdloop.c, config.h.in, console-msw.c, console-stream.c, console-tty.c, console.c, console.h, data.c, device-msw.c, device.c, device.h, dired-msw.c, dired.c, dumper.c, editfns.c, eldap.c, elhash.c, emacs.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, events.c, extents.c, faces.c, file-coding.c, file-coding.h, fileio.c, frame-msw.c, frame.c, frame.h, glyphs-gtk.c, glyphs-msw.c, glyphs-shared.c, glyphs-widget.c, glyphs-x.c, glyphs.c, glyphs.h, insdel.c, intl-auto-encap-win32.c, intl-auto-encap-win32.h, intl-encap-win32.c, intl-win32.c, keymap.c, lisp-union.h, lisp.h, lread.c, lrecord.h, lstream.c, lstream.h, macros.c, marker.c, md5.c, menubar-x.c, menubar.c, mule-coding.c, ntproc.c, objects-gtk.c, objects-msw.c, objects-x.c, objects.c, opaque.c, print.c, process-nt.c, process-unix.c, process.c, rangetab.c, redisplay-msw.c, redisplay-output.c, redisplay.c, regex.c, scrollbar-msw.c, select-msw.c, signal.c, specifier.c, specifier.h, symbols.c, sysdep.c, syswindows.h, text.c, text.h, toolbar-msw.c, tooltalk.c, ui-gtk.c, unicode.c, window.c: Redo error-checking macros: ERROR_CHECK_TYPECHECK -> ERROR_CHECK_TYPES, ERROR_CHECK_CHARBPOS -> ERROR_CHECK_TEXT, add ERROR_CHECK_DISPLAY, ERROR_CHECK_STRUCTURES. Document these in config.h.in. Fix code to follow docs. Fix *_checking_assert() in accordance with new names. Attempt to fix periodic redisplay crash freeing display line structures. Add first implementation of sledgehammer redisplay check. Redo print_*() to use write_fmt_string(), write_fmt_string_lisp(). Fix bug in md5 handling. Rename character-to-unicode to char-to-unicode; same for unicode-to-char{acter}. Move chartab documentation to `make-char-table'. Some header cleanup. Clean up remaining places where nonintercepted Windows calls are being used. automated/mule-tests.el: Fix for new Unicode support.
author ben
date Sun, 31 Mar 2002 08:30:17 +0000
parents 943eaba38521
children 804517e16990
comparison
equal deleted inserted replaced
799:03d9f9084848 800:a5954632b187
1 /* md5.c - Functions to compute MD5 message digest of files or memory blocks 1 /* md5.c - Functions to compute MD5 message digest of files or memory blocks
2 according to the definition of MD5 in RFC 1321 from April 1992. 2 according to the definition of MD5 in RFC 1321 from April 1992.
3 Copyright (C) 1995, 1996 Free Software Foundation, Inc. 3 Copyright (C) 1995, 1996 Free Software Foundation, Inc.
4 Copyright (C) 2001 Ben Wing. 4 Copyright (C) 2001, 2002 Ben Wing.
5 NOTE: The canonical source of this file is maintained with the GNU C 5 NOTE: The canonical source of this file is maintained with the GNU C
6 Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. 6 Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu.
7 7
8 This program is free software; you can redistribute it and/or modify it 8 This program is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the 9 under the terms of the GNU General Public License as published by the
513 struct md5_ctx ctx; 513 struct md5_ctx ctx;
514 unsigned char digest[16]; 514 unsigned char digest[16];
515 unsigned char thehash[33]; 515 unsigned char thehash[33];
516 int i; 516 int i;
517 517
518 Lisp_Object instream; 518 Lisp_Object raw_instream = Qnil, instream = Qnil;
519 struct gcpro gcpro1; 519 struct gcpro gcpro1, gcpro2;
520 Lisp_Object raw_instream; 520
521 struct gcpro ngcpro1; 521 GCPRO2 (raw_instream, instream);
522
523 /* Set up the input stream. */ 522 /* Set up the input stream. */
524 if (BUFFERP (object)) 523 if (BUFFERP (object))
525 { 524 {
526 struct buffer *b; 525 struct buffer *b;
527 Charbpos begv, endv; 526 Charbpos begv, endv;
528 CHECK_LIVE_BUFFER (object); 527 CHECK_LIVE_BUFFER (object);
529 b = XBUFFER (object); 528 b = XBUFFER (object);
530 /* Figure out where we need to get info from */ 529 /* Figure out where we need to get info from */
531 get_buffer_range_char (b, start, end, &begv, &endv, GB_ALLOW_NIL); 530 get_buffer_range_char (b, start, end, &begv, &endv, GB_ALLOW_NIL);
532 531
533 instream = make_lisp_buffer_input_stream (b, begv, endv, 0); 532 raw_instream = make_lisp_buffer_input_stream (b, begv, endv, 0);
534 } 533 }
535 else 534 else
536 { 535 {
537 Bytecount bstart, bend; 536 Bytecount bstart, bend;
538 CHECK_STRING (object); 537 CHECK_STRING (object);
539 get_string_range_byte (object, start, end, &bstart, &bend, 538 get_string_range_byte (object, start, end, &bstart, &bend,
540 GB_HISTORICAL_STRING_BEHAVIOR); 539 GB_HISTORICAL_STRING_BEHAVIOR);
541 instream = make_lisp_string_input_stream (object, bstart, bend - bstart); 540 raw_instream = make_lisp_string_input_stream (object, bstart,
542 } 541 bend - bstart);
543 GCPRO1 (instream); 542 }
544 543
545 /* Determine the coding and set up the conversion stream. */ 544 /* Determine the coding and set up the conversion stream. */
546 coding = md5_coding_system (object, coding, instream, !NILP (noerror)); 545 coding = md5_coding_system (object, coding, raw_instream, !NILP (noerror));
547 raw_instream = instream; 546 Lstream_rewind (XLSTREAM (raw_instream));
548 instream = make_coding_input_stream (XLSTREAM (instream), coding, CODING_ENCODE); 547 instream = make_coding_input_stream (XLSTREAM (raw_instream), coding,
549 NGCPRO1 (raw_instream); 548 CODING_ENCODE, 0);
550 549
551 /* Initialize MD5 context. */ 550 /* Initialize MD5 context. */
552 md5_init_ctx (&ctx); 551 md5_init_ctx (&ctx);
553 552
554 /* Get the data while doing the conversion. */ 553 /* Get the data while doing the conversion. */
563 /* Process the bytes. */ 562 /* Process the bytes. */
564 md5_process_bytes (tempbuf, size_in_bytes, &ctx); 563 md5_process_bytes (tempbuf, size_in_bytes, &ctx);
565 } 564 }
566 Lstream_delete (XLSTREAM (instream)); 565 Lstream_delete (XLSTREAM (instream));
567 Lstream_delete (XLSTREAM (raw_instream)); 566 Lstream_delete (XLSTREAM (raw_instream));
568 NUNGCPRO;
569 UNGCPRO; 567 UNGCPRO;
570 568
571 md5_finish_ctx (&ctx, digest); 569 md5_finish_ctx (&ctx, digest);
572 for (i = 0; i < 16; i++) 570 for (i = 0; i < 16; i++)
573 sprintf ((char *) (thehash + (i * 2)), "%02x", digest[i]); 571 sprintf ((char *) (thehash + (i * 2)), "%02x", digest[i]);