@@ -135,7 +135,9 @@ impl rowiter for rowreader {
135
135
self . offset = 0 u;
136
136
}
137
137
138
- if row_from_buf ( self , & row) {
138
+ let temp = row_from_buf ( self ) ;
139
+ if ( temp. len ( ) != 0 ) {
140
+ vec:: append ( row, temp) ;
139
141
let buflen = self . buffers . len ( ) ;
140
142
if buflen > 1 u {
141
143
self . buffers = ~[ self . buffers [ buflen-1 u] ] ;
@@ -162,7 +164,8 @@ impl rowiter for rowreader {
162
164
}*/
163
165
}
164
166
165
- fn row_from_buf ( current : & mut rowreader , fields : & ~[ ~str ] ) -> bool {
167
+ fn row_from_buf ( current : & mut rowreader ) -> ~[ ~str ] {
168
+ let mut fields: ~[ ~str ] = ~[ ] ;
166
169
let cbuffer = current. buffers . len ( ) - 1 u;
167
170
let buf = current. buffers [ cbuffer] ;
168
171
while current. offset < buf. len ( ) {
@@ -177,24 +180,24 @@ fn row_from_buf(current: &mut rowreader, fields: &~[~str]) -> bool {
177
180
current. state = inquotedfield ( cbuffer, coffset) ;
178
181
} else if c == '\n' {
179
182
if after_delim {
180
- vec:: append ( * fields, [ decode ( & current. buffers , emptyfield, current. quote ) ] ) ;
183
+ vec:: append ( fields, [ decode ( & current. buffers , emptyfield, current. quote ) ] ) ;
181
184
}
182
- return true ;
185
+ return fields ;
183
186
} else if c == current. delim {
184
187
current. state = fieldstart ( true ) ;
185
- vec:: append ( * fields, [ decode ( & current. buffers , emptyfield, current. quote ) ] ) ;
188
+ vec:: append ( fields, [ decode ( & current. buffers , emptyfield, current. quote ) ] ) ;
186
189
} else {
187
190
current. state = infield ( cbuffer, coffset) ;
188
191
}
189
192
}
190
193
infield( b, o) => {
191
194
debug ! ( "field : {} {}" , b, o) ;
192
195
if c == '\n' {
193
- vec:: append ( * fields, [ decode ( & current. buffers , new_bufferfield ( current, false , b, o, coffset) , current. quote ) ] ) ;
194
- return true ;
196
+ vec:: append ( fields, [ decode ( & current. buffers , new_bufferfield ( current, false , b, o, coffset) , current. quote ) ] ) ;
197
+ return fields ;
195
198
} else if c == current. delim {
196
199
current. state = fieldstart ( true ) ;
197
- vec:: append ( * fields, [ decode ( & current. buffers , new_bufferfield ( current, false , b, o, coffset) , current. quote ) ] ) ;
200
+ vec:: append ( fields, [ decode ( & current. buffers , new_bufferfield ( current, false , b, o, coffset) , current. quote ) ] ) ;
198
201
}
199
202
}
200
203
inquotedfield( b, o) => {
@@ -206,20 +209,20 @@ fn row_from_buf(current: &mut rowreader, fields: &~[~str]) -> bool {
206
209
inquote( b, o) => {
207
210
debug ! ( "inquote : {} {}" , b, o) ;
208
211
if c == '\n' {
209
- vec:: append ( * fields, [ decode ( & current. buffers , new_bufferfield ( current, true , b, o, coffset) , current. quote ) ] ) ;
210
- return true ;
212
+ vec:: append ( fields, [ decode ( & current. buffers , new_bufferfield ( current, true , b, o, coffset) , current. quote ) ] ) ;
213
+ return fields ;
211
214
} else if c == current. quote {
212
215
current. state = inquotedfield ( b, o) ;
213
216
} else if c == current. delim {
214
217
current. state = fieldstart ( true ) ;
215
- vec:: append ( * fields, [ decode ( & current. buffers , new_bufferfield ( current, true , b, o, coffset) , current. quote ) ] ) ;
218
+ vec:: append ( fields, [ decode ( & current. buffers , new_bufferfield ( current, true , b, o, coffset) , current. quote ) ] ) ;
216
219
}
217
220
// swallow odd chars, eg. space between field and "
218
221
}
219
222
}
220
223
debug ! ( "now {}" , statestr( current. state) ) ;
221
224
}
222
- return false ;
225
+ return ~ [ ] ;
223
226
}
224
227
225
228
fn new_bufferfield ( cur : & rowreader , escaped : bool , sb : uint , so : uint , eo : uint ) -> fieldtype {
0 commit comments