[!HAVE_DECL_GETENV]: Declare getenv.
authorJim Meyering <jim@meyering.net>
Sat, 16 Jan 1999 15:51:21 +0000 (15:51 +0000)
committerJim Meyering <jim@meyering.net>
Sat, 16 Jan 1999 15:51:21 +0000 (15:51 +0000)
(backup_args): Reorder enum members.
(backup_types): Likewise.
(get_version): Take an additional parameter, `context'.
(xget_version): Like get_version, but if the `version' argument is NULL,
use the value of the envvar VERSION_CONTROL.
(base_name): Declare.

lib/backupfile.c

index b6a557d..7f4da17 100644 (file)
 char *malloc ();
 #endif
 
+#ifndef HAVE_DECL_GETENV
+char *getenv ();
+#endif
+
+char *base_name PARAMS ((char const *));
+
 #if HAVE_DIRENT_H || HAVE_NDIR_H || HAVE_SYS_DIR_H || HAVE_SYS_NDIR_H
 # define HAVE_DIR 1
 #else
@@ -214,25 +220,49 @@ version_number (const char *base, const char *backup, size_t base_length)
 
 static const char * const backup_args[] =
 {
-  "never", "simple", "nil", "existing", "t", "numbered", 0
+  /* In a series of synonyms, present the most meaning full first, so
+     that argmatch_valid be more readable. */
+  "none", "off",
+  "simple", "never",
+  "existing", "nil",
+  "numbered", "t",
+  0
 };
 
 static const enum backup_type backup_types[] =
 {
-  simple, simple, numbered_existing, numbered_existing, numbered, numbered
+  none, none,
+  simple, simple,
+  numbered_existing, numbered_existing,
+  numbered, numbered
 };
 
-/* Return the type of backup indicated by VERSION.
-   Unique abbreviations are accepted. */
+/* Return the type of backup specified by VERSION.
+   If VERSION is NULL or the empty string, return numbered_existing.
+   If VERSION is invalid or ambiguous, fail with a diagnostic appropriate
+   for the specified CONTEXT.  Unambiguous abbreviations are accepted.  */
 
 enum backup_type
-get_version (const char *version)
+get_version (const char *context, const char *version)
 {
-  enum backup_type type;
   if (version == 0 || *version == 0)
-    type = numbered_existing;
+    return numbered_existing;
+  else
+    return XARGMATCH (context, version, backup_args, backup_types);
+}
+
+
+/* Return the type of backup specified by VERSION.
+   If VERSION is NULL, use the value of the envvar VERSION_CONTROL.
+   If the specified string is invalid or ambiguous, fail with a diagnostic
+   appropriate for the specified CONTEXT.
+   Unambiguous abbreviations are accepted.  */
+
+enum backup_type
+xget_version (const char *context, const char *version)
+{
+  if (version && *version)
+    return get_version (context, version);
   else
-    XARGMATCH (&type, "version control type", version,
-              backup_args, backup_types, exit (2));
-  return type;
+    return get_version ("$VERSION_CONTROL", getenv ("VERSION_CONTROL"));
 }