]> git.saurik.com Git - bison.git/commitdiff
* lib/Makefile.am (libbison_a_SOURCES): Add xstrndup.c.
authorAkim Demaille <akim@epita.fr>
Tue, 8 Jan 2002 17:41:38 +0000 (17:41 +0000)
committerAkim Demaille <akim@epita.fr>
Tue, 8 Jan 2002 17:41:38 +0000 (17:41 +0000)
* src/getargs.c (AS_FILE_NAME): New.
(getargs): Use it to convert DOSish file names.
* src/files.c (base_name): Rename as full_base_name to avoid
clashes with `base_name ()'.
(get_extension_index): Remove.
(filename_split): New.
(compute_base_names): N-th rewrite, using filename_split.

ChangeLog
lib/Makefile.am
lib/Makefile.in
src/files.c
src/getargs.c

index 0adb91350840d5129f7789df668c19481ea4b2ea..a34a6aea747c6d2952d588b5ae86dd68dab67475 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2002-01-08  Akim Demaille  <akim@epita.fr>
+
+       * lib/Makefile.am (libbison_a_SOURCES): Add xstrndup.c.
+       * src/getargs.c (AS_FILE_NAME): New.
+       (getargs): Use it to convert DOSish file names.
+       * src/files.c (base_name): Rename as full_base_name to avoid
+       clashes with `base_name ()'.
+       (get_extension_index): Remove.
+       (filename_split): New.
+       (compute_base_names): N-th rewrite, using filename_split.
+
 2002-01-08  Akim Demaille  <akim@epita.fr>
 
        * lib/basename.c, lib/dirname.h, lib/dirname.c, lib/memrchr.c,
 2002-01-08  Akim Demaille  <akim@epita.fr>
 
        * lib/basename.c, lib/dirname.h, lib/dirname.c, lib/memrchr.c,
index f04538362479ffd0f707ff61f3a1e115b155c2e7..15b5dda41f26a021fef701165ae9fc8583dcfff1 100644 (file)
@@ -32,7 +32,7 @@ libbison_a_SOURCES = \
   basename.c dirname.h dirname.c \
   getopt.h getopt.c getopt1.c \
   quote.h quote.c quotearg.h quotearg.c \
   basename.c dirname.h dirname.c \
   getopt.h getopt.c getopt1.c \
   quote.h quote.c quotearg.h quotearg.c \
-  xalloc.h xmalloc.c xstrdup.c
+  xalloc.h xmalloc.c xstrdup.c xstrndup.c
 
 libbison_a_LIBADD = @LIBOBJS@ @ALLOCA@
 libbison_a_DEPENDENCIES = $(libbison_a_LIBADD)
 
 libbison_a_LIBADD = @LIBOBJS@ @ALLOCA@
 libbison_a_DEPENDENCIES = $(libbison_a_LIBADD)
index 3858405bc11834e5d96c30a3fcb3b4b2c130d172..5a7d5fd0a9e9af503f0f023acffbcf46160d7a51 100644 (file)
@@ -118,7 +118,7 @@ libbison_a_SOURCES = \
   basename.c dirname.h dirname.c \
   getopt.h getopt.c getopt1.c \
   quote.h quote.c quotearg.h quotearg.c \
   basename.c dirname.h dirname.c \
   getopt.h getopt.c getopt1.c \
   quote.h quote.c quotearg.h quotearg.c \
-  xalloc.h xmalloc.c xstrdup.c
+  xalloc.h xmalloc.c xstrdup.c xstrndup.c
 
 
 libbison_a_LIBADD = @LIBOBJS@ @ALLOCA@
 
 
 libbison_a_LIBADD = @LIBOBJS@ @ALLOCA@
@@ -132,7 +132,8 @@ LIBRARIES = $(noinst_LIBRARIES)
 libbison_a_AR = $(AR) cru
 am_libbison_a_OBJECTS = basename$U.$(OBJEXT) dirname$U.$(OBJEXT) \
        getopt$U.$(OBJEXT) getopt1$U.$(OBJEXT) quote$U.$(OBJEXT) \
 libbison_a_AR = $(AR) cru
 am_libbison_a_OBJECTS = basename$U.$(OBJEXT) dirname$U.$(OBJEXT) \
        getopt$U.$(OBJEXT) getopt1$U.$(OBJEXT) quote$U.$(OBJEXT) \
-       quotearg$U.$(OBJEXT) xmalloc$U.$(OBJEXT) xstrdup$U.$(OBJEXT)
+       quotearg$U.$(OBJEXT) xmalloc$U.$(OBJEXT) xstrdup$U.$(OBJEXT) \
+       xstrndup$U.$(OBJEXT)
 libbison_a_OBJECTS = $(am_libbison_a_OBJECTS)
 
 DEFS = @DEFS@
 libbison_a_OBJECTS = $(am_libbison_a_OBJECTS)
 
 DEFS = @DEFS@
@@ -150,7 +151,7 @@ depcomp = $(SHELL) $(top_srcdir)/config/depcomp
 @AMDEP_TRUE@   $(DEPDIR)/realloc.Po $(DEPDIR)/stpcpy.Po \
 @AMDEP_TRUE@   $(DEPDIR)/strchr.Po $(DEPDIR)/strnlen.Po \
 @AMDEP_TRUE@   $(DEPDIR)/strspn.Po $(DEPDIR)/xmalloc$U.Po \
 @AMDEP_TRUE@   $(DEPDIR)/realloc.Po $(DEPDIR)/stpcpy.Po \
 @AMDEP_TRUE@   $(DEPDIR)/strchr.Po $(DEPDIR)/strnlen.Po \
 @AMDEP_TRUE@   $(DEPDIR)/strspn.Po $(DEPDIR)/xmalloc$U.Po \
-@AMDEP_TRUE@   $(DEPDIR)/xstrdup$U.Po
+@AMDEP_TRUE@   $(DEPDIR)/xstrdup$U.Po $(DEPDIR)/xstrndup$U.Po
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 CCLD = $(CC)
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 CCLD = $(CC)
@@ -216,6 +217,7 @@ mostlyclean-kr:
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strspn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xmalloc$U.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xstrdup$U.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strspn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xmalloc$U.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xstrdup$U.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xstrndup$U.Po@am__quote@
 
 distclean-depend:
        -rm -rf $(DEPDIR)
 
 distclean-depend:
        -rm -rf $(DEPDIR)
@@ -270,12 +272,15 @@ xmalloc_.c: xmalloc.c $(ANSI2KNR)
        $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xmalloc.c; then echo $(srcdir)/xmalloc.c; else echo xmalloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xmalloc_.c || rm -f xmalloc_.c
 xstrdup_.c: xstrdup.c $(ANSI2KNR)
        $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrdup.c; then echo $(srcdir)/xstrdup.c; else echo xstrdup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrdup_.c || rm -f xstrdup_.c
        $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xmalloc.c; then echo $(srcdir)/xmalloc.c; else echo xmalloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xmalloc_.c || rm -f xmalloc_.c
 xstrdup_.c: xstrdup.c $(ANSI2KNR)
        $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrdup.c; then echo $(srcdir)/xstrdup.c; else echo xstrdup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrdup_.c || rm -f xstrdup_.c
+xstrndup_.c: xstrndup.c $(ANSI2KNR)
+       $(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrndup.c; then echo $(srcdir)/xstrndup.c; else echo xstrndup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrndup_.c || rm -f xstrndup_.c
 alloca_.$(OBJEXT) basename_.$(OBJEXT) dirname_.$(OBJEXT) \
 error_.$(OBJEXT) getopt_.$(OBJEXT) getopt1_.$(OBJEXT) malloc_.$(OBJEXT) \
 memchr_.$(OBJEXT) memrchr_.$(OBJEXT) obstack_.$(OBJEXT) \
 quote_.$(OBJEXT) quotearg_.$(OBJEXT) realloc_.$(OBJEXT) \
 stpcpy_.$(OBJEXT) strchr_.$(OBJEXT) strnlen_.$(OBJEXT) \
 alloca_.$(OBJEXT) basename_.$(OBJEXT) dirname_.$(OBJEXT) \
 error_.$(OBJEXT) getopt_.$(OBJEXT) getopt1_.$(OBJEXT) malloc_.$(OBJEXT) \
 memchr_.$(OBJEXT) memrchr_.$(OBJEXT) obstack_.$(OBJEXT) \
 quote_.$(OBJEXT) quotearg_.$(OBJEXT) realloc_.$(OBJEXT) \
 stpcpy_.$(OBJEXT) strchr_.$(OBJEXT) strnlen_.$(OBJEXT) \
-strspn_.$(OBJEXT) xmalloc_.$(OBJEXT) xstrdup_.$(OBJEXT) : $(ANSI2KNR)
+strspn_.$(OBJEXT) xmalloc_.$(OBJEXT) xstrdup_.$(OBJEXT) \
+xstrndup_.$(OBJEXT) : $(ANSI2KNR)
 uninstall-info-am:
 
 tags: TAGS
 uninstall-info-am:
 
 tags: TAGS
index 2354acbeceed3f10f8c6e0deb567f7dec264c52f..c11420c838e13c05a7aebe44c73cde7b7e6fb222 100644 (file)
 #include "error.h"
 #include "complain.h"
 
 #include "error.h"
 #include "complain.h"
 
+/* From basename.c.  Almost a lie, as it returns a char *. */
+const char *base_name PARAMS ((char const *name));
+/* From xstrndup.c.  */
+char *xstrndup PARAMS ((const char *s, size_t n));
+
 FILE *finput = NULL;
 
 struct obstack action_obstack;
 FILE *finput = NULL;
 
 struct obstack action_obstack;
@@ -46,7 +51,7 @@ char *spec_defines_file = NULL; /* for --defines. */
 char *infile = NULL;
 char *attrsfile = NULL;
 
 char *infile = NULL;
 char *attrsfile = NULL;
 
-static char *base_name = NULL;
+static char *full_base_name = NULL;
 static char *short_base_name = NULL;
 
 /* C source file extension (the parser source).  */
 static char *short_base_name = NULL;
 
 /* C source file extension (the parser source).  */
@@ -113,10 +118,10 @@ compute_header_macro (void)
     {
       macro_name = XMALLOC (char,
                            strlen (prefix) +
     {
       macro_name = XMALLOC (char,
                            strlen (prefix) +
-                           strlen (base_name) +
+                           strlen (full_base_name) +
                            strlen (header_extension) + 1);
       cp = stpcpy (macro_name, prefix);
                            strlen (header_extension) + 1);
       cp = stpcpy (macro_name, prefix);
-      cp = stpcpy (cp, base_name);
+      cp = stpcpy (cp, full_base_name);
       cp = stpcpy (cp, header_extension);
     }
 
       cp = stpcpy (cp, header_extension);
     }
 
@@ -275,27 +280,6 @@ tr (const char *in, char from, char to)
   return (temp);
 }
 
   return (temp);
 }
 
-/* Gets the extension index in FILENAME. Returns 0 if fails to
-   find an extension.  */
-static int
-get_extension_index (const char *filename)
-{
-  int len;
-
-  len = strlen (filename);
-
-  if (filename[len-- - 1] == '.')
-    return (0);
-
-  while ((len > 0) && (filename[len - 1] != '.'))
-    if (filename[len - 1] == '/')
-      return (0);
-    else
-      len--;
-
-  return (len - 1);
-}
-
 /* Computes extensions from the grammar file extension. */
 static void
 compute_exts_from_gf (const char *ext)
 /* Computes extensions from the grammar file extension. */
 static void
 compute_exts_from_gf (const char *ext)
@@ -318,14 +302,61 @@ compute_exts_from_src (const char *ext)
   header_extension = tr (header_extension, 'C', 'H');
 }
 
   header_extension = tr (header_extension, 'C', 'H');
 }
 
+
+/* Decompose FILENAME in four parts: *BASE, *TAB, and *EXT, the fourth
+   part, (the directory) is ranging from FILENAME to the char before
+   *BASE, so we don't need an additional parameter.
+
+   *EXT points to the last period in the basename, or NULL if none.
+
+   If there is no *EXT, *TAB is NULL.  Otherwise, *TAB points to
+   `.tab' or `_tab' if present right before *EXT, or is NULL. *TAB
+   cannot be equal to *BASE.
+
+   None are allocated, they are simply pointers to parts of FILENAME.
+   Examples:
+
+   '/tmp/foo.tab.c' -> *BASE = 'foo.tab.c', *TAB = '.tab.c', *EXT =
+   '.c'
+
+   'foo.c' -> *BASE = 'foo.c', *TAB = NULL, *EXT = '.c'
+
+   'tab.c' -> *BASE = 'tab.c', *TAB = NULL, *EXT = '.c'
+
+   '.tab.c' -> *BASE = '.tab.c', *TAB = NULL, *EXT = '.c'
+
+   'foo.tab' -> *BASE = 'foo.tab', *TAB = NULL, *EXT = '.tab'
+
+   'foo_tab' -> *BASE = 'foo_tab', *TAB = NULL, *EXT = NULL
+
+   'foo' -> *BASE = 'foo', *TAB = NULL, *EXT = NULL.  */
+
+static void
+filename_split (const char *filename,
+               const char **base, const char **tab, const char **ext)
+{
+  *base = base_name (filename);
+
+  /* Look for the extension, i.e., look for the last dot. */
+  *ext = strrchr (*base, '.');
+  *tab = NULL;
+
+  /* If there is an exentension, check if there is a `.tab' part right
+     before.  */
+  if (*ext
+      && (*ext - *base) > (int) strlen (".tab")
+      && (!strncmp (*ext - strlen (".tab"), ".tab", strlen (".tab"))
+         || !strncmp (*ext - strlen ("_tab"), "_tab", strlen ("_tab"))))
+    *tab = *ext - strlen (".tab");
+}
+
+
 /* FIXME: Should use xstrndup. */
 
 static void
 compute_base_names (void)
 {
 /* FIXME: Should use xstrndup. */
 
 static void
 compute_base_names (void)
 {
-  size_t base_length;
-  size_t short_base_length;
-  size_t ext_index;
+  const char *base, *tab, *ext;
 
   /* If --output=foo.c was specified (SPEC_OUTFILE == foo.c),
      BASE_NAME and SHORT_BASE_NAME are `foo'.
 
   /* If --output=foo.c was specified (SPEC_OUTFILE == foo.c),
      BASE_NAME and SHORT_BASE_NAME are `foo'.
@@ -337,94 +368,63 @@ compute_base_names (void)
      files, remove the ".c" or ".tab.c" suffix.  */
   if (spec_outfile)
     {
      files, remove the ".c" or ".tab.c" suffix.  */
   if (spec_outfile)
     {
-#ifdef MSDOS
-      strlwr (spec_outfile);
-#endif /* MSDOS */
-      /* BASE_LENGTH includes ".tab" but not ".c".  */
-      base_length = strlen (spec_outfile);
-
-      ext_index = get_extension_index (spec_outfile);
-      /* If the initial segment of extension contains 'c' or a 'C', I assume
-         that it is a C or C++ source file.  */
-      if (ext_index)
-       ext_index =
-         (strspn (spec_outfile + ext_index + 1, "cC")) ? ext_index : 0;
-      if (ext_index)
-       {
-         base_length -= strlen (spec_outfile + ext_index);
-         compute_exts_from_src (spec_outfile + ext_index);
-       }
-
-      base_name = strndup (spec_outfile, base_length);
-      /* SHORT_BASE_LENGTH includes neither ".tab" nor ".c".  */
-      short_base_length = base_length;
-      if (strsuffix (base_name, ".tab") || strsuffix (base_name, "_tab"))
-       short_base_length -= 4;
-      short_base_name = strndup (spec_outfile, short_base_length);
-
-      return;
+      filename_split (spec_outfile, &base, &tab, &ext);
+
+      /* The full base name goes up the EXT, excluding it. */
+      full_base_name =
+       xstrndup (spec_outfile,
+                 (strlen (spec_outfile) - (ext ? strlen (ext) : 0)));
+      /* The short base name goes up to TAB, excluding it.  */
+      short_base_name =
+       xstrndup (spec_outfile,
+                 (strlen (spec_outfile)
+                  - (tab ? strlen (tab) : (ext ? strlen (ext) : 0))));
+
+      if (ext)
+       compute_exts_from_src (ext);
     }
 
     }
 
-  /* If --file-prefix=foo was specified, BASE_NAME and SHORT_BASE_NAME
-     are `foo'.
+  /* If --file-prefix=foo was specified, FULL_BASE_NAME = `foo.tab'
+     and SHORT_BASE_NAME = `foo'.
 
      Construct names from it.  */
 
      Construct names from it.  */
-  if (spec_file_prefix)
+  else
     {
     {
-#ifdef MSDOS
-      strlwr (spec_file_prefix);
-#endif /* MSDOS */
-      short_base_name = xstrdup (spec_file_prefix);
-      base_name = XMALLOC (char,
-                          strlen (short_base_name) + strlen (EXT_TAB) + 1);
-      stpcpy (stpcpy (base_name, short_base_name), EXT_TAB);
-
-      /* Computes the extensions from the garmmar file name.  */
-      ext_index = get_extension_index (infile);
-      /* If the initial segment of extension contains a 'y' or a 'Y', I assume
-         that it is a yacc or bison grammar file.  */
-      if (ext_index)
-       ext_index = strspn (infile + ext_index + 1, "yY") ? ext_index : 0;
-      if (ext_index)
-       compute_exts_from_gf (infile + ext_index);
-
-      return;
+      if (spec_file_prefix)
+       {
+         /* If --file-prefix=foo was specified, SHORT_BASE_NAME =
+            `foo'.  */
+         short_base_name = xstrdup (spec_file_prefix);
+       }
+      else if (yacc_flag)
+       {
+         /* If --yacc, then the output is `y.tab.c'. */
+         short_base_name = xstrdup ("y");
+       }
+      else
+       {
+         /* Otherwise, the short base name is computed from the input
+            grammar: `foo.yy' => `foo'.  */
+         filename_split (infile, &base, &tab, &ext);
+         short_base_name =
+           xstrndup (infile,
+                     (strlen (infile) - (ext ? strlen (ext) : 0)));
+       }
+
+      /* In these cases, always append `.tab'. */
+      full_base_name = XMALLOC (char,
+                               strlen (short_base_name)
+                               + strlen (EXT_TAB) + 1);
+      stpcpy (stpcpy (full_base_name, short_base_name), EXT_TAB);
+
+      /* Computes the extensions from the grammar file name.  */
+      filename_split (infile, &base, &tab, &ext);
+      if (ext)
+       compute_exts_from_gf (ext);
     }
     }
-
-  /* If neither -o nor --file-prefix were specified, and the input
-     file is foo.y, BASE_NAME is `foo.tab', and SHORT_BASE_NAME is
-     `foo'.
-
-     If --yacc is used, do as if the input file was `y.y'.  */
-  {
-    const char *name_base = yacc_flag ? "y.y" : infile;
-
-    /* BASE_LENGTH gets length of BASE_NAME, sans ".y" suffix if any.  */
-
-    base_length = strlen (name_base);
-
-    ext_index = get_extension_index (name_base);
-    /* If the initial segment of extension contains a 'y' or a 'Y', I assume
-       that it is a yacc or bison grammar file.  */
-    if (ext_index)
-      ext_index = strspn (name_base + ext_index + 1, "yY") ? ext_index : 0;
-    if (ext_index)
-      {
-       base_length -= strlen (name_base + ext_index);
-       compute_exts_from_gf (name_base + ext_index);
-      }
-
-    short_base_length = base_length;
-    short_base_name = strndup (name_base, short_base_length);
-
-    base_name = XMALLOC (char,
-                        strlen (short_base_name) + strlen (EXT_TAB) + 1);
-    stpcpy (stpcpy (base_name, short_base_name), EXT_TAB);
-
-    return;
-  }
 }
 
 }
 
+
 /*-------------------------------------------------------.
 | Close the open files, compute the output files names.  |
 `-------------------------------------------------------*/
 /*-------------------------------------------------------.
 | Close the open files, compute the output files names.  |
 `-------------------------------------------------------*/
@@ -442,7 +442,7 @@ compute_output_file_names (void)
 
   /* It the defines filename if not given, we create it.  */
   if (!spec_defines_file)
 
   /* It the defines filename if not given, we create it.  */
   if (!spec_defines_file)
-    spec_defines_file = stringappend (base_name, header_extension);
+    spec_defines_file = stringappend (full_base_name, header_extension);
 
   /* It the graph filename if not given, we create it.  */
   if (!spec_graph_file)
 
   /* It the graph filename if not given, we create it.  */
   if (!spec_graph_file)
@@ -499,7 +499,8 @@ output_files (void)
   if (spec_outfile)
     obstack_save (&table_obstack, spec_outfile);
   else
   if (spec_outfile)
     obstack_save (&table_obstack, spec_outfile);
   else
-    obstack_save (&table_obstack, stringappend (base_name, src_extension));
+    obstack_save (&table_obstack,
+                 stringappend (full_base_name, src_extension));
   obstack_free (&table_obstack, NULL);
 
   /* Output the header file if wanted. */
   obstack_free (&table_obstack, NULL);
 
   /* Output the header file if wanted. */
index dd5de7fd8e606ff0b4947b9ddb7ec14b62d86ed0..910f8bfadf1fa7ee0e88477b42129ae04ccea571 100644 (file)
@@ -159,6 +159,14 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
 | Process the options.  |
 `----------------------*/
 
 | Process the options.  |
 `----------------------*/
 
+/* Under DOS, there is no difference on the case.  This can be
+   troublesome when looking for `.tab' etc.  */
+#ifdef MSDOS
+# define AS_FILE_NAME(File) (strlwr (File), (File))
+#else
+# define AS_FILE_NAME(File) (File)
+#endif
+
 void
 getargs (int argc, char *argv[])
 {
 void
 getargs (int argc, char *argv[])
 {
@@ -186,7 +194,7 @@ getargs (int argc, char *argv[])
       case 'g':
        /* Here, the -g and --graph=FILE options are differentiated.  */
        graph_flag = 1;
       case 'g':
        /* Here, the -g and --graph=FILE options are differentiated.  */
        graph_flag = 1;
-       spec_graph_file = optarg;
+       spec_graph_file = AS_FILE_NAME (optarg);
        break;
 
       case 'v':
        break;
 
       case 'v':
@@ -194,13 +202,13 @@ getargs (int argc, char *argv[])
        break;
 
       case 'S':
        break;
 
       case 'S':
-       skeleton = optarg;
+       skeleton = AS_FILE_NAME (optarg);
        break;
 
       case 'd':
        /* Here, the -d and --defines options are differentiated.  */
        defines_flag = 1;
        break;
 
       case 'd':
        /* Here, the -d and --defines options are differentiated.  */
        defines_flag = 1;
-       spec_defines_file = optarg;
+       spec_defines_file = AS_FILE_NAME (optarg);
        break;
 
       case 'l':
        break;
 
       case 'l':
@@ -224,11 +232,11 @@ getargs (int argc, char *argv[])
        break;
 
       case 'o':
        break;
 
       case 'o':
-       spec_outfile = optarg;
+       spec_outfile = AS_FILE_NAME (optarg);
        break;
 
       case 'b':
        break;
 
       case 'b':
-       spec_file_prefix = optarg;
+       spec_file_prefix = AS_FILE_NAME (optarg);
        break;
 
       case 'p':
        break;
 
       case 'p':