From: Ben Pfaff Date: Wed, 29 Sep 2010 04:19:59 +0000 (-0700) Subject: syntax-file: Open syntax files immediately, instead of delaying. X-Git-Tag: v0.7.6~143 X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0853dd47066b6bfbfe8377adb146394e15926811;p=pspp-builds.git 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. --- 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 ;