projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fully implement arbitrary delimiters on DATA LIST, extending the half
[pspp]
/
src
/
file-type.c
diff --git
a/src/file-type.c
b/src/file-type.c
index 89a97938668b283793bd2821b404a4eb0c817106..2b11a4abd21ce4deb551a893ad6d2e1a6c7efb41 100644
(file)
--- a/
src/file-type.c
+++ b/
src/file-type.c
@@
-18,7
+18,7
@@
02111-1307, USA. */
#include <config.h>
02111-1307, USA. */
#include <config.h>
-#include
<assert.h>
+#include
"error.h"
#include <stdlib.h>
#include "alloc.h"
#include "command.h"
#include <stdlib.h>
#include "alloc.h"
#include "command.h"
@@
-444,7
+444,7
@@
cmd_record_type (void)
if (!lex_force_string ())
goto error;
rct->v[rct->nv].c = xmalloc (fty->record.nc + 1);
if (!lex_force_string ())
goto error;
rct->v[rct->nv].c = xmalloc (fty->record.nc + 1);
- st_bare_pad_copy (rct->v[rct->nv].c, ds_
value
(&tokstr),
+ st_bare_pad_copy (rct->v[rct->nv].c, ds_
c_str
(&tokstr),
fty->record.nc + 1);
}
else
fty->record.nc + 1);
}
else
@@
-623,9
+623,6
@@
file_type_source_read (struct case_source *source,
write_case_data wc_data UNUSED)
{
struct file_type_pgm *fty = source->aux;
write_case_data wc_data UNUSED)
{
struct file_type_pgm *fty = source->aux;
- char *line;
- int len;
-
struct fmt_spec format;
dfm_push (fty->handle);
struct fmt_spec format;
dfm_push (fty->handle);
@@
-633,19
+630,22
@@
file_type_source_read (struct case_source *source,
format.type = fty->record.fmt;
format.w = fty->record.nc;
format.d = 0;
format.type = fty->record.fmt;
format.w = fty->record.nc;
format.d = 0;
- while (
NULL != (line = dfm_get_record (fty->handle, &len)
))
+ while (
!dfm_eof (fty->handle
))
{
{
+ struct len_string line;
struct record_type *iter;
union value v;
int i;
struct record_type *iter;
union value v;
int i;
+ dfm_expand_tabs (fty->handle);
+ dfm_get_record (fty->handle, &line);
if (formats[fty->record.fmt].cat & FCAT_STRING)
{
struct data_in di;
v.c = c->data[fty->record.v->fv].s;
if (formats[fty->record.fmt].cat & FCAT_STRING)
{
struct data_in di;
v.c = c->data[fty->record.v->fv].s;
- data_in_finite_line (&di, l
ine, len
,
+ data_in_finite_line (&di, l
s_c_str (&line), ls_length (&line)
,
fty->record.fc, fty->record.fc + fty->record.nc);
di.v = (union value *) v.c;
di.flags = 0;
fty->record.fc, fty->record.fc + fty->record.nc);
di.v = (union value *) v.c;
di.flags = 0;
@@
-668,7
+668,7
@@
file_type_source_read (struct case_source *source,
{
struct data_in di;
{
struct data_in di;
- data_in_finite_line (&di, l
ine, len
,
+ data_in_finite_line (&di, l
s_c_str (&line), ls_length (&line)
,
fty->record.fc, fty->record.fc + fty->record.nc);
di.v = &v;
di.flags = 0;
fty->record.fc, fty->record.fc + fty->record.nc);
di.v = &v;
di.flags = 0;
@@
-688,13
+688,13
@@
file_type_source_read (struct case_source *source,
if (fty->wild)
msg (SW, _("Unknown record type %g."), v.f);
}
if (fty->wild)
msg (SW, _("Unknown record type %g."), v.f);
}
- dfm_f
w
d_record (fty->handle);
+ dfm_f
orwar
d_record (fty->handle);
continue;
found:
/* Arrive here if there is a matching record_type, which is in
iter. */
continue;
found:
/* Arrive here if there is a matching record_type, which is in
iter. */
- dfm_f
w
d_record (fty->handle);
+ dfm_f
orwar
d_record (fty->handle);
}
/* switch(fty->type)
}
/* switch(fty->type)