From 0853dd47066b6bfbfe8377adb146394e15926811 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Tue, 28 Sep 2010 21:19:59 -0700 Subject: [PATCH] syntax-file: Open syntax files immediately, instead of delaying. Until now, syntax files have been opened only when the first line needs to be read. This commit changes behavior to open syntax files as soon as the syntax file source is created. This fixes the behavior INSERT CD=YES when a relative file path is specified. Without this commit, INSERT checks that the file exists, then it creates the syntax file source, then it chdirs into the syntax file's directory, and then the syntax file source tries to open the file, which fails because the relative path is no longer correct. With this commit, the file gets opened before the chdir, so it succeeds. The following commit will add a test to prevent regression. --- src/language/syntax-file.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/language/syntax-file.c b/src/language/syntax-file.c index 55219724..83bd07b3 100644 --- a/src/language/syntax-file.c +++ b/src/language/syntax-file.c @@ -85,17 +85,8 @@ read_syntax_file (struct getl_interface *s, struct syntax_file_source *sfs = UP_CAST (s, struct syntax_file_source, parent); - /* Open file, if not yet opened. */ if (sfs->syntax_file == NULL) - { - sfs->syntax_file = fn_open (sfs->fn, "r"); - - if (sfs->syntax_file == NULL) - { - msg (ME, _("Opening `%s': %s."), sfs->fn, strerror (errno)); - return false; - } - } + return false; /* Read line from file and remove new-line. Skip initial "#! /usr/bin/pspp" line. */ @@ -142,6 +133,9 @@ create_syntax_file_source (const char *fn) struct syntax_file_source *ss = xzalloc (sizeof (*ss)); ss->fn = xstrdup (fn); + ss->syntax_file = fn_open (ss->fn, "r"); + if (ss->syntax_file == NULL) + msg (ME, _("Opening `%s': %s."), ss->fn, strerror (errno)); ss->parent.interactive = always_false; ss->parent.read = read_syntax_file ; -- 2.30.2