Changeset 365


Ignore:
Timestamp:
Oct 30, 2011, 8:54:38 AM (13 years ago)
Author:
katerina
Message:

Fix for ticket #269 (Issue with redefinition of policies).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_files.c

    r363 r365  
    283283static int        sh_files_pushdir   (int class, const char * str_s);
    284284static int        sh_files_pushfile  (int class, const char * str_s);
    285 static int        sh_files_checkdir  (int class, int rdepth, char * dirName,
     285static int        sh_files_checkdir  (int class, unsigned long check_mask,
     286                                      int rdepth, char * dirName,
    286287                                      char * relativeName);
    287 static ShFileType sh_files_filecheck (int class, char * dirName,
    288                                       char * fileName, int * reported,
    289                                       int rsrcflag);
    290288
    291289static long MaxRecursionLevel = 0;
     
    356354#endif
    357355              sl_strlcpy(pstr, sh_hash_getpolicy(ptr->class), sizeof(pstr));
    358               sh_error_handle ((-1),  FIL__, __LINE__, 0, MSG_FI_CHK, pstr, tmp);
     356              sh_error_handle ((-1),  FIL__, __LINE__, 0,
     357                               MSG_FI_CHK, pstr, tmp);
    359358            }
    360359
    361360          BREAKEXIT(sh_files_filecheck);
    362361          tmp_reported = ptr->is_reported; /* fix aliasing warning */
    363           status = sh_files_filecheck (ptr->class, dir, file,
     362          status = sh_files_filecheck (ptr->class, ptr->check_mask, dir, file,
    364363                                       &tmp_reported, 0);
    365364          ptr->is_reported = tmp_reported;
     
    937936  char                  * name;
    938937  int                     class;
     938  unsigned long           check_mask;
    939939  int                     rdepth;
    940940  short                   type;
     
    944944static zAVLTree * zglobList   = NULL;
    945945
    946 static void sh_files_pushglob (int class, int type, const char * p, int rdepth)
     946static void sh_files_pushglob (int class, int type, const char * p, int rdepth,
     947                               unsigned long check_mask, int flag)
    947948{
    948949  int     globstatus = -1;
     
    970971          new_item_ptr->name           = fileName;
    971972          new_item_ptr->class          = class;
     973          new_item_ptr->check_mask     = (flag == 0) ? sh_files_maskof(class) : check_mask;
    972974          new_item_ptr->rdepth         = rdepth;
    973975          new_item_ptr->type           = type;
     
    10581060    {
    10591061      sh_files_pushglob(testPattern->class, testPattern->type,
    1060                         testPattern->name, testPattern->rdepth);
     1062                        testPattern->name, testPattern->rdepth,
     1063                        testPattern->check_mask, 1);
    10611064    }
    10621065  SL_RET0(_("sh_files_check_globPatterns"));
     
    10831086int sh_files_delglobstack ()
    10841087{
    1085   SL_ENTER(_("sh_files_delfilestack"));
     1088  SL_ENTER(_("sh_files_delglobstack"));
    10861089
    10871090  zAVLFreeTree (zglobList, free_globstack);
    10881091  zglobList = NULL;
    10891092
    1090   SL_RETURN(0, _("sh_files_delfilestack"));
     1093  SL_RETURN(0, _("sh_files_delglobstack"));
    10911094}
    10921095 
     
    11901193  else
    11911194    {
    1192       sh_files_pushglob (class, SH_LIST_FILE, p, 0);
     1195      sh_files_pushglob (class, SH_LIST_FILE, p, 0, 0, 0);
    11931196    }
    11941197
     
    12681271                {
    12691272                  BREAKEXIT(sh_files_filecheck);
    1270                   sh_files_filecheck (dst_ptr->class, ptr->name, 
     1273                  sh_files_filecheck (dst_ptr->class, dst_ptr->check_mask, ptr->name, 
    12711274                                      NULL,  &status, 0);
    12721275                  dst_ptr->checked = S_TRUE;
     
    12801283
    12811284          if (status == S_FALSE)
    1282             sh_files_filecheck (ptr->class,  ptr->name,  NULL,  &status, 0);
     1285            sh_files_filecheck (ptr->class,  ptr->check_mask, ptr->name,  NULL,  &status, 0);
    12831286
    12841287          BREAKEXIT(sh_files_checkdir);
    1285           status = sh_files_checkdir (ptr->class, ptr->rdepth, ptr->name,
     1288          status = sh_files_checkdir (ptr->class, ptr->check_mask, ptr->rdepth, ptr->name,
    12861289                                      ptr->name);
    12871290
     
    16011604  else
    16021605    {
    1603       sh_files_pushglob (class, which_dirList, tail, rdepth);
     1606      sh_files_pushglob (class, which_dirList, tail, rdepth, 0, 0);
    16041607    }
    16051608#else 
     
    17451748/* -- check a single directory and its content
    17461749 */
    1747 static int sh_files_checkdir (int iclass, int idepth, char * iname,
     1750static int sh_files_checkdir (int iclass, unsigned long check_mask,
     1751                              int idepth, char * iname,
    17481752                              char * relativeName)
    17491753{
     
    17691773  int             class_next;
    17701774  int             file_class_next;
     1775  unsigned long   check_mask_next;
     1776  unsigned long   file_check_mask_next;
    17711777
    17721778  int             checked_flag  = S_FALSE;
     
    18361842      SL_RETURN((-1), _("sh_files_checkdir"));
    18371843    }
    1838    
    1839    
     1844
    18401845  /* ---- stat the directory ----
    18411846   */
     
    18441849  theFile->attr_string = NULL;
    18451850  theFile->link_path   = NULL;
     1851  theFile->check_mask  = check_mask;
    18461852
    18471853  (void) relativeName;
     
    19831989    rdepth_next     = rdepth - 1;
    19841990    class_next      = class;
     1991    check_mask_next = check_mask;
    19851992    file_class_next = class;
     1993    file_check_mask_next = check_mask;
    19861994    checked_flag    = -1;
    19871995    cchecked_flag   = -1;
     
    20002008         */
    20012009        file_class_next    = dst_ptr->class;
     2010        file_check_mask_next = dst_ptr->check_mask;
    20022011        checked_flag       = dst_ptr->checked;
    20032012        cchecked_flag      = dst_ptr->childs_checked;
     
    20152024             */
    20162025            file_class_next    = dst_ptr->class;
     2026            file_check_mask_next = dst_ptr->check_mask;
    20172027            checked_flag       = dst_ptr->checked;
    20182028            cchecked_flag      = dst_ptr->childs_checked;
     
    20292039         */
    20302040        file_class_next    = dst_ptr->class;
     2041        file_check_mask_next = dst_ptr->check_mask;
    20312042        checked_flag       = dst_ptr->checked;
    20322043        /* not set, hence always FALSE                   */
     
    20652076          dummy = dst_ptr->is_reported;
    20662077
    2067         checkit = sh_files_filecheck (file_class_next,
     2078        checkit = sh_files_filecheck (file_class_next, file_check_mask_next,
    20682079                                      iname,
    20692080                                      dirlist->sh_d_name,
     
    20842095      {
    20852096        ++theDir->NumDirs;
     2097
    20862098        if (rdepth_next >= 0 && cchecked_flag != S_TRUE)
    20872099          {
     
    21032115                rdepth_next   = tmp_ptr->rdepth;
    21042116                class_next    = tmp_ptr->class;
     2117                check_mask_next = tmp_ptr->check_mask;
    21052118                /* 28. Aug 2001 reversed
    21062119                 */
     
    21202133                    rdepth_next   = tmp_ptr->rdepth;
    21212134                    class_next    = tmp_ptr->class;
     2135                    check_mask_next = tmp_ptr->check_mask;
    21222136                    /* 28. Aug 2001 reversed
    21232137                     */
     
    21272141              }
    21282142           
    2129             if (cchecked_flag == S_FALSE)
     2143          if (cchecked_flag == S_FALSE)
    21302144              {
    2131                 sh_files_checkdir (class_next, rdepth_next, tmpcat,
     2145                sh_files_checkdir (class_next, check_mask_next, rdepth_next, tmpcat,
    21322146                                   dirlist->sh_d_name);
    21332147                tmp_ptr->childs_checked = S_TRUE;
     
    21382152              }
    21392153            else if (checked_flag == -1)
    2140               sh_files_checkdir (class_next, rdepth_next, tmpcat,
     2154              sh_files_checkdir (class_next, check_mask_next, rdepth_next, tmpcat,
    21412155                                 dirlist->sh_d_name);
    21422156           
     
    22182232}
    22192233
    2220 static ShFileType sh_files_filecheck (int class, char * dirName,
    2221                                       char * infileName,
    2222                                       int * reported,
    2223                                       int rsrcflag)
     2234static void * sh_dummy_fileName;
     2235static void * sh_dummy_tmpname;
     2236static void * sh_dummy_tmpdir;
     2237
     2238ShFileType sh_files_filecheck (int class, unsigned long check_mask,
     2239                               char * dirName,
     2240                               char * infileName,
     2241                               int * reported,
     2242                               int rsrcflag)
    22242243{
    22252244  /* 28 Aug 2001 allow NULL fileName
     
    22412260  theFile  = SH_ALLOC(sizeof(file_type));
    22422261
     2262  /* Take the address to keep gcc from putting it into a register.
     2263   * Avoids the 'clobbered by longjmp' warning.
     2264   */
     2265  sh_dummy_fileName = (void *) &fileName;
     2266  sh_dummy_tmpname  = (void *) &tmpname;
     2267  sh_dummy_tmpdir   = (void *) &tmpdir;
     2268
    22432269  BREAKEXIT(sh_derr);
    22442270
     
    22632289  if (dirName == NULL /* || fileName == NULL */)
    22642290    {
     2291      SH_MUTEX_LOCK(mutex_thread_nolog);
    22652292      sh_error_handle ((-1), FIL__, __LINE__, 0, MSG_FI_NULL);
     2293      SH_MUTEX_UNLOCK(mutex_thread_nolog);
    22662294      SH_FREE(fullpath);
    22672295      SH_FREE(theFile);
     
    22762304        {
    22772305          tmpname = sh_util_safe_name (fileName);
     2306          SH_MUTEX_LOCK(mutex_thread_nolog);
    22782307          sh_error_handle (ShDFLevel[SH_ERR_T_NAME], FIL__, __LINE__, 0,
    22792308                           MSG_FI_OBSC2,
    22802309                           "", tmpname);
     2310          SH_MUTEX_UNLOCK(mutex_thread_nolog);
    22812311          SH_FREE(tmpname);
    22822312        }
     
    22852315          tmpdir  = sh_util_safe_name (dirName);
    22862316          tmpname = sh_util_safe_name (fileName);
     2317          SH_MUTEX_LOCK(mutex_thread_nolog);
    22872318          sh_error_handle (ShDFLevel[SH_ERR_T_NAME], FIL__, __LINE__, 0,
    22882319                           MSG_FI_OBSC2,
    22892320                           tmpdir, tmpname);
     2321          SH_MUTEX_UNLOCK(mutex_thread_nolog);
    22902322          SH_FREE(tmpname);
    22912323          SH_FREE(tmpdir);
     
    22992331      tmpdir  = sh_util_safe_name (dirName);
    23002332      tmpname = sh_util_safe_name (fileName);
     2333      SH_MUTEX_LOCK(mutex_thread_nolog);
    23012334      sh_error_handle (ShDFLevel[SH_ERR_T_FILE],  FIL__, __LINE__, 0,
    23022335                       MSG_FI_2LONG2,
    23032336                       tmpdir, tmpname);
     2337      SH_MUTEX_UNLOCK(mutex_thread_nolog);
    23042338      SH_FREE(tmpname);
    23052339      SH_FREE(tmpdir);
     
    23132347   */
    23142348  sl_strlcpy (theFile->fullpath, fullpath, PATH_MAX);
    2315   theFile->check_mask    = sh_files_maskof(class);
     2349  theFile->check_mask    = check_mask /* sh_files_maskof(class) */;
    23162350  theFile->file_reported = (*reported);
    23172351  theFile->attr_string   = NULL;
     
    23472381    {
    23482382      tmpname = sh_util_safe_name (fullpath); /* fixed in 1.5.4 */
     2383      SH_MUTEX_LOCK(mutex_thread_nolog);
    23492384      sh_error_handle ((-1), FIL__, __LINE__, 0, MSG_FI_CSUM,
    23502385                       fileHash, tmpname);
     2386      SH_MUTEX_UNLOCK(mutex_thread_nolog);
    23512387      SH_FREE(tmpname);
    23522388    }
     
    24622498  SL_RETURN((0),_("sh_files_fullpath"));
    24632499}
    2464 
    24652500
    24662501/* -----------------------------------
Note: See TracChangeset for help on using the changeset viewer.