diff options
author | kan <kan@FreeBSD.org> | 2004-08-12 16:41:42 +0000 |
---|---|---|
committer | kan <kan@FreeBSD.org> | 2004-08-12 16:41:42 +0000 |
commit | 1cd197c850fbf2cebb1cf92e2cc7b1ad60e19cbb (patch) | |
tree | ec9fa386d0db0e8a0278709d5705ff4b03fe8a31 /contrib/gcc/doschk.c | |
parent | 44be17529b330657e94bec9b7c894ed5dcd5f8b0 (diff) | |
download | FreeBSD-src-1cd197c850fbf2cebb1cf92e2cc7b1ad60e19cbb.zip FreeBSD-src-1cd197c850fbf2cebb1cf92e2cc7b1ad60e19cbb.tar.gz |
This commit was generated by cvs2svn to compensate for changes in r133582,
which included commits to RCS files with non-trunk default branches.
Diffstat (limited to 'contrib/gcc/doschk.c')
-rw-r--r-- | contrib/gcc/doschk.c | 360 |
1 files changed, 0 insertions, 360 deletions
diff --git a/contrib/gcc/doschk.c b/contrib/gcc/doschk.c deleted file mode 100644 index d024efc..0000000 --- a/contrib/gcc/doschk.c +++ /dev/null @@ -1,360 +0,0 @@ -/* -** DosFCheck - check file names for DOS consistency -** -** Distribute freely, it only encourages DOS compatibility! -** - DJ Delorie -*/ - -/* This file is not part of GCC. */ - -#include <stdio.h> -#ifdef __MSDOS__ -#include <alloc.h> -#else -#include <malloc.h> -#endif -#include <ctype.h> -#include <string.h> - -typedef struct ENT -{ - struct ENT *next; - char *dos_name; - char *full_name; - char *path; - int tagged; -} ENT; - -ENT *eroot = 0; - -int first_inv = 1; -int first_msg = 1; - -/****************************************************************\ - * Utility routines * -\****************************************************************/ - -void -invalid_msg () -{ - if (first_inv) - { - if (first_msg) - first_msg = 0; - else - putchar ('\n'); - printf ("The following files are not valid DOS file names:\n"); - first_inv = 0; - } -} - -ENT * -alloc_ent () -{ - ENT *rv = (ENT *)malloc (sizeof (ENT)); - if (rv == 0) - { - fprintf (stderr, "Unable to allocate memory for an ENT\n"); - exit (1); - } - memset (rv, 0, sizeof (ENT)); - return rv; -} - -void -fill_ent (ent, path) -ENT *ent; -char *path; -{ - char *first = path; - char *null = path+strlen (path); - char *last_slash = strrchr (path, '/'); - char *cp, *dp; - int dots_seen, chars_seen; - - if (last_slash+1 == null) - { - * --null = '\0'; - last_slash = strrchr (path, '/'); - } - - if (!last_slash) - { - last_slash = first-1; - } - - if (null-last_slash < 13) - ent->dos_name = (char *)malloc (null-last_slash); - else - ent->dos_name = (char *)malloc (13); - ent->full_name = (char *)malloc (null-last_slash); - ent->path = (char *)malloc (last_slash-first+1); - - strcpy (ent->full_name, last_slash+1); - if (last_slash > first) - { - strncpy (ent->path, first, last_slash-first); - ent->path[last_slash-first] = '\0'; - } - else - *ent->path = '\0'; - - cp = last_slash+1; - dp = ent->dos_name; - dots_seen = 0; - chars_seen = 0; - while (1) - { - if (! *cp) - break; - switch (*cp) - { - case '.': - if (cp == last_slash+1 && strcmp (last_slash+1, ".")) - { - invalid_msg (); - printf ("%s - file name cannot start with dot\n", path); - *dp = 0; - break; - } - if (dots_seen == 1) - { - invalid_msg (); - printf ("%s - too many dots\n", path); - *dp = '\0'; - break; - } - *dp++ = '.'; - chars_seen = 0; - dots_seen++; - break; - case '"': - case '*': - case '+': - case ',': - case ';': - case '<': - case '=': - case '>': - case '?': - case '[': - case '\\': - case ']': - case '|': - invalid_msg (); - printf ("%s - invalid character `%c'\n", path, *cp); - *dp++ = '?'; - chars_seen++; - break; - default: - if (dots_seen) - { - if (chars_seen >= 3) - break; - } - else - if (chars_seen >= 8) - break; - if ((*cp <= ' ') || (*cp >= 0x7f)) - { - invalid_msg (); - printf ("%s - invalid character `%c'\n", path, *cp); - *dp++ = '?'; - chars_seen++; - break; - } - if (islower (*cp)) - *dp++ = toupper (*cp); - else - *dp++ = *cp; - chars_seen++; - break; - } - cp++; - } - *dp++ = '\0'; -} - -int -compare_ent_dosname (e1, e2) -ENT **e1; -ENT **e2; -{ - int r = strcmp ((*e1)->dos_name, (*e2)->dos_name); - if (r == 0) - r = strcmp ((*e1)->path, (*e2)->path); - if (r == 0) - r = strcmp ((*e1)->full_name, (*e2)->full_name); - return r; -} - -int -compare_ent_fullname (e1, e2) -ENT **e1; -ENT **e2; -{ - int r = strncmp ((*e1)->full_name, (*e2)->full_name, 14); - if (r == 0) - r = strcmp ((*e1)->path, (*e2)->path); - if (r == 0) - r = strcmp ((*e1)->full_name, (*e2)->full_name); - return r; -} - -char * -mpath (ent) -ENT *ent; -{ - static char buf[500]; - if (ent->path && ent->path[0]) - sprintf (buf, "%s/%s", ent->path, ent->full_name); - else - return ent->full_name; - return buf; -} - -/****************************************************************\ - * List handling routines * -\****************************************************************/ - -void -add_ent (ent) -ENT *ent; -{ - ent->next = eroot; - eroot = ent; -} - -void -handle_input (line) -char *line; -{ - ENT *ent = alloc_ent (); - fill_ent (ent, line); - add_ent (ent); -} - -void -display_problems () -{ - ENT **elist, *ent; - int ecount, i, first, first_err; - - for (ecount=0, ent=eroot; ent; ent=ent->next, ecount++); - elist = (ENT **)malloc (sizeof (ENT *) * ecount); - for (ecount=0, ent=eroot; ent; ent=ent->next, ecount++) - elist[ecount] = ent; - - qsort (elist, ecount, sizeof (ENT *), compare_ent_dosname); - - first = 1; - first_err = 1; - for (i=0; i<ecount-1; i++) - { - if ((strcmp (elist[i]->dos_name, elist[i+1]->dos_name) == 0) - && (strcmp (elist[i]->path, elist[i+1]->path) == 0)) - { - if (first_err) - { - if (first_msg) - first_msg = 0; - else - putchar ('\n'); - printf ("The following resolve to the same DOS file names:\n"); - first_err = 0; - } - if (first) - { - printf ("%14s : %s\n", elist[i]->dos_name, mpath (elist[i])); - first = 0; - } - printf ("\t\t %s\n", mpath (elist[i+1])); - } - else - first = 1; - } - - qsort (elist, ecount, sizeof (ENT *), compare_ent_fullname); - - first = 1; - first_err = 1; - for (i=0; i<ecount-1; i++) - { - if ((strncmp (elist[i]->full_name, elist[i+1]->full_name, 14) == 0) - && (strcmp (elist[i]->path, elist[i+1]->path) == 0)) - { - if (first_err) - { - if (first_msg) - first_msg = 0; - else - putchar ('\n'); - printf ("The following resolve to the same SysV file names:\n"); - first_err = 0; - } - if (first) - { - printf ("%.14s : %s\n", elist[i]->full_name, mpath (elist[i])); - first = 0; - elist[i]->tagged = 1; - } - printf ("\t\t %s\n", mpath (elist[i+1])); - elist[i+1]->tagged = 1; - } - else - first = 1; - } - - first_err = 1; - for (i=0; i<ecount; i++) - { - if ((strlen (elist[i]->full_name) > 14) && !elist[i]->tagged) - { - if (first_err) - { - if (first_msg) - first_msg = 0; - else - putchar ('\n'); - printf ("The following file names are too long for SysV:\n"); - first_err = 0; - } - printf ("%.14s : %s\n", elist[i]->full_name, mpath (elist[i])); - } - } -} - -/****************************************************************\ - * Main entry point * -\****************************************************************/ - -main (argc, argv) -int argc; -char **argv; -{ - FILE *input = stdin; - if (argc > 1) - { - input = fopen (argv[1], "r"); - if (!input) - { - perror (argv[1]); - exit (1); - } - } - while (1) - { - char line[500]; - char *lp; - fgets (line, 500, input); - if (feof (input)) - break; - lp = line+strlen (line); - while ((lp != line) && (*lp <= ' ')) - lp--; - lp[1] = 0; - handle_input (line); - } - display_problems (); -} - |