along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <config.h>
+
#include <ctype.h>
+#include <errno.h>
#include <stdlib.h>
-#include <libpspp/alloc.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <data/file-name.h>
#include <language/command.h>
-#include <libpspp/message.h>
-#include <libpspp/getl.h>
-#include <language/syntax-file.h>
#include <language/lexer/lexer.h>
+#include <language/syntax-file.h>
+#include <libpspp/getl.h>
+#include <libpspp/message.h>
#include <libpspp/str.h>
-#include <data/file-name.h>
-#include <dirname.h>
-#include <canonicalize.h>
+#include "dirname.h"
+#include "xalloc.h"
#include "gettext.h"
#define _(msgid) gettext (msgid)
syntax_mode = GETL_BATCH;
else
{
- lex_error(lexer,
- _("Expecting BATCH or INTERACTIVE after SYNTAX."));
+ lex_error (lexer, _("expecting %s or %s after %s"),
+ "BATCH", "INTERACTIVE", "SYNTAX");
return CMD_FAILURE;
}
}
}
else
{
- lex_error (lexer, _("Expecting YES or NO after CD."));
+ lex_error (lexer, _("expecting %s or %s after %s"),
+ "YES", "NO", "CD");
return CMD_FAILURE;
}
}
}
else
{
- lex_error (lexer, _("Expecting CONTINUE or STOP after ERROR."));
+ lex_error (lexer, _("expecting %s or %s after %s"),
+ "CONTINUE", "STOP", "ERROR");
return CMD_FAILURE;
}
}
lex_match (lexer, '=');
/* File name can be identifier or string. */
- if (lex_token (lexer) != T_ID && lex_token (lexer) != T_STRING)
+ if (lex_token (lexer) != T_ID && !lex_is_string (lexer))
{
lex_error (lexer, _("expecting file name"));
return CMD_FAILURE;
return CMD_FAILURE;
}
- *filename = canonicalize_file_name (relative_filename);
- free (relative_filename);
+ *filename = relative_filename;
+ if (*filename == NULL)
+ {
+ msg (SE, _("Unable to open `%s': %s."),
+ relative_filename, strerror (errno));
+ free (relative_filename);
+ return CMD_FAILURE;
+ }
return CMD_SUCCESS;
}