X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Futilities%2Fhost.c;h=fbc9d208be7a08a1b4c518894f0e317d1413be5b;hb=9ade26c8349b4434008c46cf09bc7473ec743972;hp=ac09145451609c52d7236849631a38a0138bd34f;hpb=774441e68b4d2e3a4b5c6975e9614dcd4369955e;p=pspp-builds.git diff --git a/src/language/utilities/host.c b/src/language/utilities/host.c index ac091454..fbc9d208 100644 --- a/src/language/utilities/host.c +++ b/src/language/utilities/host.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2009, 2010 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2009, 2010, 2011 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 @@ -30,9 +30,11 @@ #include "language/lexer/lexer.h" #include "libpspp/assertion.h" #include "libpspp/compiler.h" +#include "libpspp/i18n.h" #include "libpspp/message.h" #include "libpspp/str.h" +#include "gl/localcharset.h" #include "gl/xalloc.h" #include "gl/xmalloca.h" @@ -129,35 +131,41 @@ cmd_host (struct lexer *lexer, struct dataset *ds UNUSED) return CMD_FAILURE; } - if (lex_token (lexer) == '.') + if (lex_token (lexer) == T_ENDCMD) return shell () ? CMD_SUCCESS : CMD_FAILURE; else if (lex_match_id (lexer, "COMMAND")) { struct string command; + char *locale_command; bool ok; - lex_match (lexer, '='); - if (!lex_force_match (lexer, '[')) + lex_match (lexer, T_EQUALS); + if (!lex_force_match (lexer, T_LBRACK)) return CMD_FAILURE; ds_init_empty (&command); while (lex_is_string (lexer)) { if (!ds_is_empty (&command)) - ds_put_char (&command, '\n'); - ds_put_substring (&command, ds_ss (lex_tokstr (lexer))); + ds_put_byte (&command, '\n'); + ds_put_substring (&command, lex_tokss (lexer)); lex_get (lexer); } - if (!lex_force_match (lexer, ']')) + if (!lex_force_match (lexer, T_RBRACK)) { ds_destroy (&command); return CMD_FAILURE; } - ok = run_command (ds_cstr (&command)); + locale_command = recode_string (locale_charset (), "UTF-8", + ds_cstr (&command), + ds_length (&command)); ds_destroy (&command); - return ok ? lex_end_of_command (lexer) : CMD_FAILURE; + ok = run_command (locale_command); + free (locale_command); + + return ok ? CMD_SUCCESS : CMD_FAILURE; } else {