X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdata-io%2Finpt-pgm.c;h=36c58c859122fc5a0c6f9322bd46ed102f1af135;hb=2814862a2c45a39f9822cf4c64ca3884822d064d;hp=eac1f06fca4789c751e6b229ef4aea116692d106;hpb=fe8dc2171009e90d2335f159d05f7e6660e24780;p=pspp diff --git a/src/language/data-io/inpt-pgm.c b/src/language/data-io/inpt-pgm.c index eac1f06fca..36c58c8591 100644 --- a/src/language/data-io/inpt-pgm.c +++ b/src/language/data-io/inpt-pgm.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -266,6 +266,7 @@ cmd_reread (struct lexer *lexer, struct dataset *ds) struct file_handle *fh; /* File to be re-read. */ struct expression *e; /* Expression for column to set. */ struct reread_trns *t; /* Created transformation. */ + char *encoding = NULL; fh = fh_get_default_handle (); e = NULL; @@ -277,14 +278,13 @@ cmd_reread (struct lexer *lexer, struct dataset *ds) if (e) { - msg (SE, _("%s subcommand may be given at most once."), "COLUMN"); - expr_free (e); - return CMD_CASCADING_FAILURE; + lex_sbc_only_once ("COLUMN"); + goto error; } e = expr_parse (lexer, ds, EXPR_NUMBER); if (!e) - return CMD_CASCADING_FAILURE; + goto error; } else if (lex_match_id (lexer, "FILE")) { @@ -292,26 +292,39 @@ cmd_reread (struct lexer *lexer, struct dataset *ds) fh_unref (fh); fh = fh_parse (lexer, FH_REF_FILE | FH_REF_INLINE, NULL); if (fh == NULL) - { - expr_free (e); - return CMD_CASCADING_FAILURE; - } + goto error; + } + else if (lex_match_id (lexer, "ENCODING")) + { + lex_match (lexer, T_EQUALS); + if (!lex_force_string (lexer)) + goto error; + + free (encoding); + encoding = ss_xstrdup (lex_tokss (lexer)); + + lex_get (lexer); } else { lex_error (lexer, NULL); - expr_free (e); - return CMD_CASCADING_FAILURE; + goto error; } } t = xmalloc (sizeof *t); - t->reader = dfm_open_reader (fh, lexer); + t->reader = dfm_open_reader (fh, lexer, encoding); t->column = e; add_transformation (ds, reread_trns_proc, reread_trns_free, t); fh_unref (fh); + free (encoding); return CMD_SUCCESS; + +error: + expr_free (e); + free (encoding); + return CMD_CASCADING_FAILURE; } /* Executes a REREAD transformation. */