Change LINES->HEADER-FIELDS to stop at a blank line, and to use memory
authorChris Hanson <org/chris-hanson/cph>
Mon, 8 May 2000 14:59:06 +0000 (14:59 +0000)
committerChris Hanson <org/chris-hanson/cph>
Mon, 8 May 2000 14:59:06 +0000 (14:59 +0000)
more efficiently.

v7/src/imail/imail-core.scm

index 9d92c584d8c149ee0b46ff6e08bd6dcd64065550..a9aac0c9e57f7b5f96aef2b9a51466d5635c53b8 100644 (file)
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: imail-core.scm,v 1.41 2000/05/05 17:18:10 cph Exp $
+;;; $Id: imail-core.scm,v 1.42 2000/05/08 14:59:06 cph Exp $
 ;;;
 ;;; Copyright (c) 1999-2000 Massachusetts Institute of Technology
 ;;;
   (append-map! header-field->lines headers))
 
 (define (lines->header-fields lines)
-  (map lines->header-field (burst-list lines header-field-initial-line?)))
+  (let loop ((lines lines) (headers '()))
+    (if (and (pair? lines)
+            (not (string-null? (car lines))))
+       (let collect-group ((lines (cdr lines)) (group (list (car lines))))
+         (if (or (not (pair? lines))
+                 (string-null? (car lines))
+                 (header-field-initial-line? (car lines)))
+             (loop lines (lines->header-field (reverse! group)))
+             (collect-group (cdr lines) (cons (car lines) group))))
+       (reverse! headers))))
 
 (define (header-field-initial-line? line)
   (let ((colon (string-find-next-char line #\:)))