Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/lib-mail/message-size.c @ 956:26cafa3dc09c HEAD
minor optimization
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 12 Jan 2003 01:49:45 +0200 |
parents | fd8888f6f037 |
children | e0dbaabbc22b |
rev | line source |
---|---|
0 | 1 /* Copyright (C) 2002 Timo Sirainen */ |
2 | |
3 #include "lib.h" | |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
4 #include "istream.h" |
0 | 5 #include "message-parser.h" |
6 #include "message-size.h" | |
7 | |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
856
diff
changeset
|
8 void message_get_header_size(struct istream *input, struct message_size *hdr) |
0 | 9 { |
410
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
232
diff
changeset
|
10 const unsigned char *msg; |
184 | 11 size_t i, size, startpos, missing_cr_count; |
0 | 12 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
856
diff
changeset
|
13 memset(hdr, 0, sizeof(struct message_size)); |
0 | 14 |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
15 missing_cr_count = 0; startpos = 0; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
16 while (i_stream_read_data(input, &msg, &size, startpos) > 0) { |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
17 for (i = startpos; i < size; i++) { |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
18 if (msg[i] != '\n') |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
19 continue; |
0 | 20 |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
21 hdr->lines++; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
22 if (i == 0 || msg[i-1] != '\r') { |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
23 /* missing CR */ |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
24 missing_cr_count++; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
25 } |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
26 |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
27 if (i == 0 || (i == 1 && msg[i-1] == '\r')) { |
0 | 28 /* no headers at all */ |
29 break; | |
30 } | |
31 | |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
32 if ((i > 0 && msg[i-1] == '\n') || |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
33 (i > 1 && msg[i-2] == '\n' && msg[i-1] == '\r')) { |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
34 /* \n\n or \n\r\n - end of headers */ |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
35 break; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
36 } |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
37 } |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
38 |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
39 if (i < size) { |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
40 /* end of header */ |
9
21c8e080150d
fixes, seems to be somewhat working now.
Timo Sirainen <tss@iki.fi>
parents:
5
diff
changeset
|
41 startpos = i+1; |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
42 break; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
43 } |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
44 |
232
9277e893304e
s/io_buffer_read_data/io_buffer_read_data_blocking/ and fixed the various
Timo Sirainen <tss@iki.fi>
parents:
184
diff
changeset
|
45 /* leave the last two characters, they may be \r\n */ |
9277e893304e
s/io_buffer_read_data/io_buffer_read_data_blocking/ and fixed the various
Timo Sirainen <tss@iki.fi>
parents:
184
diff
changeset
|
46 startpos = size == 1 ? 1 : 2; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
47 i_stream_skip(input, i - startpos); |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
48 |
232
9277e893304e
s/io_buffer_read_data/io_buffer_read_data_blocking/ and fixed the various
Timo Sirainen <tss@iki.fi>
parents:
184
diff
changeset
|
49 hdr->physical_size += i - startpos; |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
50 } |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
51 i_stream_skip(input, startpos); |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
52 hdr->physical_size += startpos; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
53 |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
54 hdr->virtual_size = hdr->physical_size + missing_cr_count; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
55 i_assert(hdr->virtual_size >= hdr->physical_size); |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
56 } |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
57 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
856
diff
changeset
|
58 void message_get_body_size(struct istream *input, struct message_size *body, |
856
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
59 uoff_t max_virtual_size, int *last_cr) |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
60 { |
410
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
232
diff
changeset
|
61 const unsigned char *msg; |
184 | 62 size_t i, size, startpos, missing_cr_count; |
856
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
63 int cr; |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
64 |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
856
diff
changeset
|
65 memset(body, 0, sizeof(struct message_size)); |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
66 |
856
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
67 cr = 0; |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
68 missing_cr_count = 0; startpos = 0; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
69 while (max_virtual_size != 0 && |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
70 i_stream_read_data(input, &msg, &size, startpos) > 0) { |
856
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
71 cr = 0; |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
72 for (i = startpos; i < size && max_virtual_size > 0; i++) { |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
73 max_virtual_size--; |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
74 |
856
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
75 if (msg[i] == '\n') { |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
76 if (i == 0 || msg[i-1] != '\r') { |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
77 /* missing CR */ |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
78 missing_cr_count++; |
0 | 79 |
856
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
80 if (max_virtual_size == 0) { |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
81 cr = 2; |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
82 break; |
856
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
83 } |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
84 |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
85 max_virtual_size--; |
0 | 86 } |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
87 |
856
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
88 /* increase after making sure we didn't break |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
89 at virtual \r */ |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
90 body->lines++; |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
91 } |
0 | 92 } |
93 | |
856
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
94 if (cr == 0 && i > 0 && msg[i-1] == '\r') |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
95 cr = 1; |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
96 |
232
9277e893304e
s/io_buffer_read_data/io_buffer_read_data_blocking/ and fixed the various
Timo Sirainen <tss@iki.fi>
parents:
184
diff
changeset
|
97 /* leave the last character, it may be \r */ |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
98 i_stream_skip(input, i - 1); |
232
9277e893304e
s/io_buffer_read_data/io_buffer_read_data_blocking/ and fixed the various
Timo Sirainen <tss@iki.fi>
parents:
184
diff
changeset
|
99 startpos = 1; |
0 | 100 |
232
9277e893304e
s/io_buffer_read_data/io_buffer_read_data_blocking/ and fixed the various
Timo Sirainen <tss@iki.fi>
parents:
184
diff
changeset
|
101 body->physical_size += i - 1; |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
102 } |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
103 i_stream_skip(input, startpos); |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
104 body->physical_size += startpos; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
105 |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
106 body->virtual_size = body->physical_size + missing_cr_count; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
107 i_assert(body->virtual_size >= body->physical_size); |
856
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
108 |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
109 if (last_cr != NULL) |
e49f7397af98
Some bugfixes and speedups for partial fetch handling.
Timo Sirainen <tss@iki.fi>
parents:
805
diff
changeset
|
110 *last_cr = cr; |
0 | 111 } |
112 | |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
856
diff
changeset
|
113 void message_skip_virtual(struct istream *input, uoff_t virtual_skip, |
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
856
diff
changeset
|
114 struct message_size *msg_size, int *cr_skipped) |
0 | 115 { |
410
1f0e7229ee58
Split IOBuffer into mmaped IBuffer, file IBuffer, memory data IBuffer and
Timo Sirainen <tss@iki.fi>
parents:
232
diff
changeset
|
116 const unsigned char *msg; |
184 | 117 size_t i, size, startpos; |
0 | 118 |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
119 *cr_skipped = FALSE; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
120 if (virtual_skip == 0) |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
121 return; |
0 | 122 |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
123 startpos = 0; |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
124 while (i_stream_read_data(input, &msg, &size, startpos) > 0) { |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
125 for (i = startpos; i < size && virtual_skip > 0; i++) { |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
126 virtual_skip--; |
0 | 127 |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
128 if (msg[i] == '\r') { |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
129 /* CR */ |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
130 if (virtual_skip == 0) |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
131 *cr_skipped = TRUE; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
132 } else if (msg[i] == '\n') { |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
133 /* LF */ |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
134 if (i == 0 || msg[i-1] != '\r') { |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
135 /* missing CR */ |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
136 if (msg_size != NULL) |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
137 msg_size->virtual_size++; |
0 | 138 |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
139 if (virtual_skip == 0) { |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
140 /* CR/LF boundary */ |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
141 *cr_skipped = TRUE; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
142 break; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
143 } |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
144 |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
145 virtual_skip--; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
146 } |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
147 |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
148 /* increase after making sure we didn't break |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
149 at virtual \r */ |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
150 if (msg_size != NULL) |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
151 msg_size->lines++; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
152 } |
0 | 153 } |
154 | |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
155 if (msg_size != NULL) { |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
156 msg_size->physical_size += i; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
157 msg_size->virtual_size += i; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
158 } |
0 | 159 |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
160 if (i < size) { |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
161 i_stream_skip(input, i); |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
162 break; |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
163 } |
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
164 |
232
9277e893304e
s/io_buffer_read_data/io_buffer_read_data_blocking/ and fixed the various
Timo Sirainen <tss@iki.fi>
parents:
184
diff
changeset
|
165 /* leave the last character, it may be \r */ |
764
f57c52738f90
Renamed IBuffer and OBuffer to IStream and OStream which describes their
Timo Sirainen <tss@iki.fi>
parents:
410
diff
changeset
|
166 i_stream_skip(input, i - 1); |
232
9277e893304e
s/io_buffer_read_data/io_buffer_read_data_blocking/ and fixed the various
Timo Sirainen <tss@iki.fi>
parents:
184
diff
changeset
|
167 startpos = 1; |
5
1b34ec11fff8
Message data is parsed in blocks (no longer entirely mmap()ed). Several
Timo Sirainen <tss@iki.fi>
parents:
0
diff
changeset
|
168 } |
0 | 169 } |
170 | |
903
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
856
diff
changeset
|
171 void message_size_add(struct message_size *dest, |
fd8888f6f037
Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents:
856
diff
changeset
|
172 const struct message_size *src) |
0 | 173 { |
174 dest->virtual_size += src->virtual_size; | |
175 dest->physical_size += src->physical_size; | |
176 dest->lines += src->lines; | |
177 } |