X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdata-io%2Finpt-pgm.c;h=afeb832643f4cda772964aad6707652e07a9a0fe;hb=54a2df235d08f661a3122f5b40361258d35014c8;hp=6f2a99e038cceca6bb2fc06c1b64ca30ec6f9e30;hpb=da1bf03a84fa10f04e8c5438f22b523f0480dd7d;p=pspp diff --git a/src/language/data-io/inpt-pgm.c b/src/language/data-io/inpt-pgm.c index 6f2a99e038..afeb832643 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 @@ -107,12 +107,14 @@ cmd_input_program (struct lexer *lexer, struct dataset *ds) enum cmd_result result; result = cmd_parse_in_state (lexer, ds, CMD_STATE_INPUT_PROGRAM); - if (result == CMD_END_CASE) + if (result == (enum cmd_result) CMD_END_CASE) { emit_END_CASE (ds, inp); saw_END_CASE = true; } - else if (cmd_result_is_failure (result) && result != CMD_FAILURE) + else if (cmd_result_is_failure (result) + && result != CMD_FAILURE + && lex_get_error_mode (lexer) != LEX_ERROR_INTERACTIVE) { if (result == CMD_EOF) msg (SE, _("Unexpected end-of-file within INPUT PROGRAM.")); @@ -266,6 +268,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; @@ -278,13 +281,12 @@ cmd_reread (struct lexer *lexer, struct dataset *ds) if (e) { lex_sbc_only_once ("COLUMN"); - expr_free (e); - return CMD_CASCADING_FAILURE; + 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 +294,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. */