I limited the BENIGN list to charcters other than [a-zA-Z0-9] currently used in distribution file names; <dot> could be added.

(The "etcetera" file has lines such as "Zone Etc/GMT+10...")

On an unrelated note: I checked; "zic -v" already checks abbreviations and issues warnings.

    --ado


On Wed, Jun 25, 2014 at 8:36 PM, Jonathan Leffler <jonathan.leffler@gmail.com> wrote:
Dot is pretty benign in a file name, isn't it?

POSIX defines the portable file name character set as:

3.278 Portable Filename Character Set

The set of characters from which portable filenames are constructed.


A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

(http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_278)
or
(http://pubs.opengroup.org/onlinepubs/9699919799/toc.htm and under Base Definitions, section 3 Definitions, and thence to 3.278).

Your list omits . <dot> and adds + <plus> (and includes / <slash> the path separator).




On Wed, Jun 25, 2014 at 4:37 PM, Arthur David Olson <arthurdavidolson@gmail.com> wrote:
To help ensure that non-ASCII characters don't appear in distribution filenames,
changes to zic.c so that the "-v" option warns about them. Both attached and
tab-mangled below.

    --ado

*** /tmp/,azic.c    2014-06-25 19:32:44.803874900 -0400
--- /tmp/,bzic.c    2014-06-25 19:32:44.906880800 -0400
***************
*** 134,139 ****
--- 134,140 ----
  static int    itsdir(const char * name);
  static int    lowerit(int c);
  static int    mkdirs(char * filename);
+ static void    namecheck(const char * name);
  static void    newabbr(const char * abbr);
  static zic_t    oadd(zic_t t1, zic_t t2);
  static void    outzone(const struct zone * zp, int ntzones);
***************
*** 621,632 ****
--- 622,652 ----
      return (errors == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  }
 
+ #define BENIGN    "+-_/"
+
+ static void
+ namecheck(const char * const name)
+ {
+     register const char *    cp;
+
+     if (!noise)
+         return;
+     for (cp = name; *cp != '\0'; ++cp)
+         if (!isascii(*cp) ||
+             (!isalnum(*cp) && strchr(BENIGN, *cp) == NULL)) {
+ warning(_("file name %s has non-ASCII-alphanumeric character other than %s"),
+                     name, BENIGN);
+             return;
+         }
+ }
+
  static void
  dolink(const char *const fromfield, const char *const tofield)
  {
      register char *    fromname;
      register char *    toname;
 
+     namecheck(tofield);
      if (fromfield[0] == '/')
          fromname = ecpyalloc(fromfield);
      else {
***************
*** 1495,1500 ****
--- 1515,1521 ----
      void *typesptr = ats + timecnt;
      unsigned char *types = typesptr;
 
+     namecheck(name);
      /*
      ** Sort.
      */





--
Jonathan Leffler <jonathan.leffler@gmail.com>  #include <disclaimer.h>
Guardian of DBD::Informix - v2013.0521 - http://dbi.perl.org
"Blessed are we who can laugh at ourselves, for we shall never cease to be amused."