⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vfname.c

📁 国外网站上的一些精典的C程序
💻 C
字号:
/***  valid_fname.c AKA vfname.c (revised)*/#include <stdio.h>#include <string.h>#include "filnames.h"#include "vfname.h"/***  valid_fname.c****  Verifies whether a filename is valid or invalid without**  altering the passed filename itself.****  Arguments: 1 - fname = a filename with no path or drive**             2 - wild_check: 0 means wildcard use okay**                             any other value means test for**                             wildcards which are not acceptable****  Returns:   Error_   - fname is invalid**             Success_ - fname is valid****  Side effects: none****  Notes: Space, ASCII character 32, is a special case. Dos will**         write a filename or volume label that includes a space.**         Getting access to that file, afterwards, is not always**         easy :) For my purposes, space is an invalid filename**         token. You? You're on your own :)****         High-bit-set or embedded control characters are not handled**         in this version.****  Revisions: 1) Dropped str2upper after comment by David Johnson**                on 07-17-93**             2) Added [] to token list after comment by Ed**                Kowalski on 07-17-93**             3) Added lpt1-lpt3, com1-com4 and clock$ to**                invalid name list after comment by Ed**                Kowalski on 07-17-93**             4) Eliminated double exit points after my own**                comment to Bob Stout :)**             5) Major revision to clean up code and add parameterized**                filename and format validation****  Public domain by Sid Rogers on 07/22/1993,**                   Bob Stout 11-Sep-95*/Boolean_T valid_fname(const char *fname, Boolean_T wild_check){      /*      ** Invalid filename tokens - path separators first, wildcards last      */      static char *invalid_tokens=            (PATH_SEP_CHARS INVALID_CHARS WILDCARD_CHARS);      /*      ** Invalid file names -- even with extension .xxx      */      static char *invalid_3lnam[] = DEVICE_LIST_3;      static char *invalid_4lnam[] = DEVICE_LIST_4;      static char *invalid_6lnam[] = DEVICE_LIST_6;      int num_vals;      int fl = strlen(fname);      int i, j, k;      char *ptr;      if (wild_check)               /* Using wildcards invalid if TRUE  */            num_vals = strlen(invalid_tokens);      else  num_vals = strlen(invalid_tokens) - strlen(WILDCARD_CHARS);      for (i = 0; NULL != invalid_3lnam[i]; ++i)      {            if (Success_ == strncmp(invalid_3lnam[i], fname, 3))                  return Error_;      }      for (i = 0; NULL != invalid_4lnam[i]; ++i)      {            if (Success_ == strncmp(invalid_4lnam[i], fname, 4))                  return Error_;      }      for (i = 0; NULL != invalid_6lnam[i]; ++i)      {            if (Success_ == strncmp(invalid_6lnam[i], fname, 6))                  return Error_;      }      /* Process filename for invalid tokens    */      for (i = -1, j = 0; i < 0 && j <= num_vals; j++)      {            for (k = 0; k < fl; k++)            {                  if (invalid_tokens[j] == fname[k])                        i = j;            }            if (i >= 0)                  return Error_;      }      /*      ** OK so far, check format      */      if (fl > FNAME_MAX)            return Error_;      for (i = 0; i < strlen(PATH_SEP_CHARS); ++i)      {            if (NULL != strchr(fname, invalid_tokens[i]))                  return Error_;      }            if (NULL == (ptr = strchr(fname, '.')))      {            if (fl > FNAME_MAX)                  return Error_;      }      else      {            if ((ptr - (char *)fname) > FNAME_SIZE_MAX)                  return Error_;#if FNAME_SIZE_MIN            if ((ptr - (char *)fname) < FNAME_SIZE_MIN)                  return Error_;#endif            ++ptr;                              /* Skip the period      */            if (!MULTIPLE_EXTS && NULL != strchr(ptr, '.'))                  return Error_;            if (strlen(ptr) > FEXT_SIZE_MAX)                  return Error_;#if FEXT_SIZE_MIN            if (strlen(ptr) < FEXT_SIZE_MIN)                  return Error_;#endif      }      return Success_;}#ifdef TESTmain(){      static char *name_test[]= {"aaa","aux","con","prn","nul","lpt1",                                    "lpt2","lpt3","com1","com2","com3",                                    "com4","bbbb","clock$","cccccc",                                    "dev/nul","clock$.ext",NULL};      static char *token_test[]={"00fname.","01 fname","02fname,",                                    "03fname[","04fname;","05fname:",                                    "06fname|","07fname/","08fname<",                                    "09fname>","10fname+","11fname=",                                    "12fname\\","13fname\"","14fname]",                                    "15fname*","16fname?","filename.17",                                    "filename.018","19longfilename",                                    "20.longext","21.mlt.exts","a.22",                                    ".23","fname24.",NULL};      register int i;      puts("Names test");      for (i = 0; (name_test[i]); ++i)      {            printf("%6s is %s\n", name_test[i],                  valid_fname(name_test[i], 0) ? "INvalid" : "Valid");      }      puts("\nTokens test");      for (i = 0; (token_test[i]); ++i)      {            printf("%s is %s\n", token_test[i],                  valid_fname(token_test[i], 1) ? "INvalid" : "Valid");      }      return 0;}#endif /* TEST */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -