match.c
上传用户:xiejiait
上传日期:2007-01-06
资源大小:881k
文件大小:4k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /*
  2.  * 27-Mar-96: Jan-Piet Mens <jpm@mens.de>
  3.  * added 'match' option (-m) to specify regular expressions NOT to be included
  4.  * in the CD image.
  5.  */
  6. static char rcsid[] ="$Id: match.c,v 1.3 1999/03/02 03:41:25 eric Exp $";
  7. #include "config.h"
  8. #include <prototyp.h>
  9. #include <stdio.h>
  10. #ifndef VMS
  11. #ifdef ORIG_BUT_DOES_NOT_WORK
  12. #ifdef HAVE_MALLOC_H
  13. #include <malloc.h>
  14. #else
  15. #include <stdlib.h>
  16. #endif
  17. #else
  18. #include <stdxlib.h>
  19. #endif
  20. #endif
  21. #include <string.h>
  22. #include "match.h"
  23. #ifdef USE_LIBSCHILY
  24. #include <standard.h>
  25. #endif
  26. #define MAXMATCH 1000
  27. static char *mat[MAXMATCH];
  28. int
  29. add_match(fn)
  30. char * fn;
  31. {
  32.   register int i;
  33.   for (i=0; mat[i] && i<MAXMATCH; i++);
  34.   if (i == MAXMATCH) {
  35.     fprintf(stderr,"Can't exclude RE '%s' - too many entries in tablen",fn);
  36.     return 0;
  37.   }
  38.  
  39.   mat[i] = (char *) malloc(strlen(fn)+1);
  40.   if (mat[i] == NULL) {
  41. #ifdef USE_LIBSCHILY
  42.     errmsg("Can't allocate memory for excluded filenamen");
  43. #else
  44.     fprintf(stderr,"Can't allocate memory for excluded filenamen");
  45. #endif
  46.     return 0;
  47.   }
  48.   strcpy(mat[i],fn);
  49.   return 1;
  50. }
  51. int matches(fn)
  52. char * fn;
  53. {
  54.   /* very dumb search method ... */
  55.   register int i;
  56.   for (i=0; mat[i] && i<MAXMATCH; i++) {
  57.     if (fnmatch(mat[i], fn, FNM_FILE_NAME) != FNM_NOMATCH) {
  58.       return 1; /* found -> excluded filename */
  59.     }
  60.   }
  61.   return 0; /* not found -> not excluded */
  62. }
  63. /* ISO9660/RR hide */
  64. static char *i_mat[MAXMATCH];
  65. int
  66. i_add_match(fn)
  67. char * fn;
  68. {
  69.   register int i;
  70.   for (i=0; i_mat[i] && i<MAXMATCH; i++);
  71.   if (i == MAXMATCH) {
  72.     fprintf(stderr,"Can't exclude RE '%s' - too many entries in tablen",fn);
  73.     return 0;
  74.   }
  75.  
  76.   i_mat[i] = (char *) malloc(strlen(fn)+1);
  77.   if (i_mat[i] == NULL) {
  78. #ifdef USE_LIBSCHILY
  79.     errmsg("Can't allocate memory for excluded filenamen");
  80. #else
  81.     fprintf(stderr,"Can't allocate memory for excluded filenamen");
  82. #endif
  83.     return 0;
  84.   }
  85.   strcpy(i_mat[i],fn);
  86.   return 1;
  87. }
  88. int i_matches(fn)
  89. char * fn;
  90. {
  91.   /* very dumb search method ... */
  92.   register int i;
  93.   for (i=0; i_mat[i] && i<MAXMATCH; i++) {
  94.     if (fnmatch(i_mat[i], fn, FNM_FILE_NAME) != FNM_NOMATCH) {
  95.       return 1; /* found -> excluded filename */
  96.     }
  97.   }
  98.   return 0; /* not found -> not excluded */
  99. }
  100. int i_ishidden()
  101. {
  102.   return((int)(i_mat[0] != 0));
  103. }
  104. /* Joliet hide */
  105. static char *j_mat[MAXMATCH];
  106. int
  107. j_add_match(fn)
  108. char * fn;
  109. {
  110.   register int i;
  111.   for (i=0; j_mat[i] && i<MAXMATCH; i++);
  112.   if (i == MAXMATCH) {
  113.     fprintf(stderr,"Can't exclude RE '%s' - too many entries in tablen",fn);
  114.     return 0;
  115.   }
  116.  
  117.   j_mat[i] = (char *) malloc(strlen(fn)+1);
  118.   if (j_mat[i] == NULL) {
  119. #ifdef USE_LIBSCHILY
  120.     errmsg("Can't allocate memory for excluded filenamen");
  121. #else
  122.     fprintf(stderr,"Can't allocate memory for excluded filenamen");
  123. #endif
  124.     return 0;
  125.   }
  126.   strcpy(j_mat[i],fn);
  127.   return 1;
  128. }
  129. int j_matches(fn)
  130. char * fn;
  131. {
  132.   /* very dumb search method ... */
  133.   register int i;
  134.   for (i=0; j_mat[i] && i<MAXMATCH; i++) {
  135.     if (fnmatch(j_mat[i], fn, FNM_FILE_NAME) != FNM_NOMATCH) {
  136.       return 1; /* found -> excluded filename */
  137.     }
  138.   }
  139.   return 0; /* not found -> not excluded */
  140. }
  141. int j_ishidden()
  142. {
  143.   return((int)(j_mat[0] != 0));
  144. }
  145. void
  146. add_list(file)
  147. char *file;
  148. {
  149.   FILE *fp;
  150.   char name[1024];
  151.   if ((fp = fopen(file, "r")) == NULL) {
  152. #ifdef USE_LIBSCHILY
  153.     comerr("Can't open exclude file list %sn", file);
  154. #else
  155.     fprintf(stderr,"Can't open exclude file list %sn", file);
  156.     exit (1);
  157. #endif
  158.   }
  159.   while (fscanf(fp, "%s", name) != EOF) {
  160.     if (!add_match(name)) {
  161.       fclose(fp);
  162.       return;
  163.     }
  164.   }
  165.   fclose(fp);
  166. }
  167. void
  168. i_add_list(file)
  169. char *file;
  170. {
  171.   FILE *fp;
  172.   char name[1024];
  173.   if ((fp = fopen(file, "r")) == NULL) {
  174. #ifdef USE_LIBSCHILY
  175.     comerr("Can't open hidden file list %sn", file);
  176. #else
  177.     fprintf(stderr,"Can't open hidden file list %sn", file);
  178.     exit (1);
  179. #endif
  180.   }
  181.   while (fscanf(fp, "%s", name) != EOF) {
  182.     if (!i_add_match(name)) {
  183.       fclose(fp);
  184.       return;
  185.     }
  186.   }
  187.   fclose(fp);
  188. }
  189. void
  190. j_add_list(file)
  191. char *file;
  192. {
  193.   FILE *fp;
  194.   char name[1024];
  195.   if ((fp = fopen(file, "r")) == NULL) {
  196. #ifdef USE_LIBSCHILY
  197.     comerr("Can't open hidden Joliet file list %sn", file);
  198. #else
  199.     fprintf(stderr,"Can't open hidden Joliet file list %sn", file);
  200.     exit (1);
  201. #endif
  202.   }
  203.   while (fscanf(fp, "%s", name) != EOF) {
  204.     if (!j_add_match(name)) {
  205.       fclose(fp);
  206.       return;
  207.     }
  208.   }
  209.   fclose(fp);
  210. }