[Osiris-devel]non-printable characters

Brian Wotring brian at shmoo.com
Tue Aug 14 09:19:30 EDT 2001


>I think it's a great idea...  how does TW hand this?

/*
  * char *
  * filename_escape(char *filename)
  *
  *      find any characters that must be escaped in the file name.
  */

char *
filename_escape (filename)
     char *filename;
{
     static char filetmp[MAXPATHLEN+256];
     register char *pcin = filename, *pcout = filetmp;
     static char *octal_array[] = {
         "000", "001", "002", "003", "004", "005", "006", "007",
         "010", "011", "012", "013", "014", "015", "016", "017",
         "020", "021", "022", "023", "024", "025", "026", "027",
         "030", "031", "032", "033", "034", "035", "036", "037",
         "040", "041", "042", "043", "044", "045", "046", "047",
         "050", "051", "052", "053", "054", "055", "056", "057",
         "060", "061", "062", "063", "064", "065", "066", "067",
         "070", "071", "072", "073", "074", "075", "076", "077",
         "100", "101", "102", "103", "104", "105", "106", "107",
         "110", "111", "112", "113", "114", "115", "116", "117",
         "120", "121", "122", "123", "124", "125", "126", "127",
         "130", "131", "132", "133", "134", "135", "136", "137",
         "140", "141", "142", "143", "144", "145", "146", "147",
         "150", "151", "152", "153", "154", "155", "156", "157",
         "160", "161", "162", "163", "164", "165", "166", "167",
         "170", "171", "172", "173", "174", "175", "176", "177",
         "200", "201", "202", "203", "204", "205", "206", "207",
         "210", "211", "212", "213", "214", "215", "216", "217",
         "220", "221", "222", "223", "224", "225", "226", "227",
         "230", "231", "232", "233", "234", "235", "236", "237",
         "240", "241", "242", "243", "244", "245", "246", "247",
         "250", "251", "252", "253", "254", "255", "256", "257",
         "260", "261", "262", "263", "264", "265", "266", "267",
         "270", "271", "272", "273", "274", "275", "276", "277",
         "300", "301", "302", "303", "304", "305", "306", "307",
         "310", "311", "312", "313", "314", "315", "316", "317",
         "320", "321", "322", "323", "324", "325", "326", "327",
         "330", "331", "332", "333", "334", "335", "336", "337",
         "340", "341", "342", "343", "344", "345", "346", "347",
         "350", "351", "352", "353", "354", "355", "356", "357",
         "360", "361", "362", "363", "364", "365", "366", "367",
         "370", "371", "372", "373", "374", "375", "376", "377",
     };
     register char *pccopy;

     /* these only matter if they are the first character */
     if (*pcin == '!' || *pcin == '=' || *pcin == '#')
         { *pcout++ = '\\'; *pcout++ = *pcin++; }

     /* these must be replace everywhere in the filename */
     while (*pcin) {
         if (tw_isalnum(*pcin)) {
             *pcout++ = *pcin;
         }
         else if (iscntrl(*pcin)) {
             *pcout++ = '\\';
             *pcout++ = *(pccopy = octal_array[(unsigned char)(*pcin)]);
             *pcout++ = *++pccopy;
             *pcout++ = *++pccopy;
         }
         else {
             switch(*pcin) {
               case '\\':
               case '\'':
               case '\"':
               case '@':
               case ' ':
               case '(':
               case ')':
               case '&':
               case '|':
               case '#':
                 *pcout++ = '\\';
                 *pcout++ = *(pccopy = octal_array[(unsigned char)(*pcin)]);
                 *pcout++ = *++pccopy;
                 *pcout++ = *++pccopy;
                 break;
             default:
                 *pcout++ = *pcin;
                 break;
             }
         }
         pcin++;
     }

     /* null terminate the string */
     *pcout++ = '\0';

     return filetmp;
}

-- 
Brian Wotring ( brian at shmoo.com )
PGP KeyID: 0x9674763D





More information about the osiris-devel mailing list