Changeset 114 for trunk/src/sh_hash.c


Ignore:
Timestamp:
Jul 30, 2007, 10:59:10 PM (17 years ago)
Author:
rainer
Message:

Revision of file flag code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_hash.c

    r107 r114  
    290290  char           * linkpath;
    291291  char           * attr_string;
    292   int              visited;
    293   int              reported;
    294   int              allignore;
     292  int              fflags;
    295293  unsigned long    modi_mask;
    296294  struct           file_info * next;
     
    487485    }
    488486
    489   /* Kernel info
     487  /* Not a fully qualified path, i.e. some info stored by some module
    490488   */
    491   if (p->fullpath[0] == 'K')
     489  if (p->fullpath[0] != '/')
    492490    {
    493491      SL_RET0(_("hash_unvisited"));
    494492    }
    495493
    496   /* visited   = FALSE: not seen;
    497    * visited   = 99:    not seen, and already checked
    498    * reported  = FALSE: not reported yet
    499    * allignore = FALSE: not under IgnoreAll
     494  /* visited   flag not set: not seen;
     495   * checked   flag     set: not seen (i.e. missing), and already checked
     496   * reported  flag not set: not reported yet
     497   * allignore flag not set: not under IgnoreAll
    500498   *
    501499   * Files/directories under IgnoreAll are noticed as missing already
    502500   * during the file check.
    503501   */
    504   if ((p->visited == S_FALSE || p->visited == 99) && p->reported == S_FALSE
    505       && p->allignore == S_FALSE)
     502  if (((!SH_FFLAG_VISITED_SET(p->fflags)) || SH_FFLAG_CHECKED_SET(p->fflags))
     503      && (!SH_FFLAG_REPORTED_SET(p->fflags))
     504      && (!SH_FFLAG_ALLIGNORE_SET(p->fflags)))
    506505    {
    507506      i = retry_lstat(FIL__, __LINE__, p->fullpath, &buf);
     
    520519              SH_FREE(ptr);
    521520            }
    522           if (p->visited != 99)
     521
     522          /* Only report if !SH_FFLAG_CHECKED_SET
     523           */
     524          if (!SH_FFLAG_CHECKED_SET(p->fflags))
    523525            {
    524526              if (S_FALSE == sh_ignore_chk_del(p->fullpath))
     
    572574              SL_RET0(_("hash_unvisited"));
    573575#else
    574               p->reported = S_TRUE;
     576              SET_SH_FFLAG_REPORTED(p->fflags);
    575577#endif
    576578            }
     
    578580    }
    579581
    580   else if (p->visited == S_TRUE && p->reported == S_TRUE
    581            && p->allignore == S_FALSE)
     582  else if (SH_FFLAG_VISITED_SET(p->fflags) && SH_FFLAG_REPORTED_SET(p->fflags)
     583           && (!SH_FFLAG_ALLIGNORE_SET(p->fflags)))
    582584    {
    583585      if (S_FALSE == sh_ignore_chk_new(p->fullpath))
     
    597599        }
    598600
    599       p->reported = S_FALSE;
     601      CLEAR_SH_FFLAG_REPORTED(p->fflags);
    600602    }
    601603
    602604  if (sh.flag.reportonce == S_FALSE)
    603     p->reported = S_FALSE;
    604 
    605   p->visited = S_FALSE;
     605    CLEAR_SH_FFLAG_REPORTED(p->fflags);
     606
     607  CLEAR_SH_FFLAG_VISITED(p->fflags);
     608  CLEAR_SH_FFLAG_CHECKED(p->fflags);
     609
    606610  SL_RET0(_("hash_unvisited"));
    607611}
     
    10491053
    10501054  memcpy( &(*p).theFile, &ft, sizeof(sh_filestore_t) );
    1051   p->visited   = S_FALSE;
    1052   p->reported  = S_FALSE;
    1053   p->allignore = S_FALSE;
     1055
     1056  p->fflags = 0;
     1057
    10541058  p->modi_mask = 0L;
    10551059  p->fullpath  = fullpath;
     
    18351839
    18361840  if (!p) return (-1);
    1837   if (p->allignore == S_FALSE &&
     1841  if ((!SH_FFLAG_ALLIGNORE_SET(p->fflags)) &&
    18381842      (p->modi_mask & MODI_CHK) != 0 &&
    18391843      (p->modi_mask & MODI_MOD) != 0)
     
    18831887  if (p == NULL)
    18841888    SL_RETURN((-1), _("sh_hash_set_visited_int"));
    1885   if (flag == 99)
    1886     {
    1887       p->visited  = 99;
    1888       p->reported = S_FALSE;
    1889     }
    1890   else
    1891     {
    1892       p->visited  = S_TRUE;
    1893       p->reported = flag;
     1889
     1890  if (flag == SH_FFLAG_CHECKED)
     1891    {
     1892      CLEAR_SH_FFLAG_REPORTED(p->fflags);
     1893      CLEAR_SH_FFLAG_VISITED(p->fflags);
     1894      SET_SH_FFLAG_CHECKED(p->fflags);
     1895    }
     1896  else
     1897    {
     1898      SET_SH_FFLAG_VISITED(p->fflags);
     1899      CLEAR_SH_FFLAG_CHECKED(p->fflags);
     1900      if (flag == SH_FFLAG_REPORTED)
     1901        SET_SH_FFLAG_REPORTED(p->fflags);
     1902      else
     1903        CLEAR_SH_FFLAG_REPORTED(p->fflags);
    18941904    }
    18951905  SL_RETURN((0), _("sh_hash_set_visited_int"));
     
    19031913  int i;
    19041914  SL_ENTER(_("sh_hash_set_visited"));
    1905   i = sh_hash_set_visited_int(newname, 99);
     1915  i = sh_hash_set_visited_int(newname, SH_FFLAG_CHECKED);
    19061916  SL_RETURN(i, _("sh_hash_set_visited"));
    19071917}
    19081918
     1919/* mark the file as visited and reported
     1920 */
    19091921int sh_hash_set_visited (char * newname)
    19101922{
    19111923  int i;
    19121924  SL_ENTER(_("sh_hash_set_visited"));
    1913   i = sh_hash_set_visited_int(newname, S_TRUE);
     1925  i = sh_hash_set_visited_int(newname, SH_FFLAG_REPORTED);
    19141926  SL_RETURN(i, _("sh_hash_set_visited"));
    19151927}
    19161928
     1929/* mark the file as visited and NOT reported
     1930 * used to avoid deletion of file from internal database
     1931 */
    19171932int sh_hash_set_visited_true (char * newname)
    19181933{
    19191934  int i;
    19201935  SL_ENTER(_("sh_hash_set_visited_true"));
    1921   i = sh_hash_set_visited_int(newname, S_FALSE);
     1936  i = sh_hash_set_visited_int(newname, 0);
    19221937  SL_RETURN(i, _("sh_hash_set_visited_true"));
    19231938}
     
    20912106
    20922107  memcpy( &(*fp).theFile, &p, sizeof(sh_filestore_t) );
    2093   fp->visited   = S_FALSE;
    2094   fp->reported  = S_FALSE;
    2095   fp->allignore = S_FALSE;
     2108  fp->fflags    = 0;
    20962109  fp->modi_mask = 0L;
    20972110
     
    25992612
    26002613      if (p)
    2601         p->visited   = S_TRUE;
     2614        {
     2615          SET_SH_FFLAG_VISITED(p->fflags);
     2616          CLEAR_SH_FFLAG_CHECKED(p->fflags);
     2617        }
     2618
    26022619      if (sh.flag.reportonce == S_TRUE)
    2603         theFile->reported = S_TRUE;
     2620        SET_SH_FFLAG_REPORTED(theFile->file_reported);
    26042621
    26052622      if (sh.flag.reportonce == S_TRUE && sh.flag.update == S_FALSE)
     
    28282845  /* --- Report on modified files. ---
    28292846   */
    2830   if (modi_mask != 0 && p->reported == S_FALSE)
     2847  if (modi_mask != 0 && (!SH_FFLAG_REPORTED_SET(p->fflags)))
    28312848    {
    28322849      tmp = SH_ALLOC(SH_BUFSIZE);
     
    31883205
    31893206#ifndef REPLACE_OLD
    3190       p->reported = S_TRUE;
     3207      SET_SH_FFLAG_REPORTED(p->fflags);
    31913208#endif
    31923209
     
    32473264              theFile->hardlinks = p->theFile.hardlinks;
    32483265             
    3249               p->visited = S_TRUE;
     3266              SET_SH_FFLAG_VISITED(p->fflags);
     3267              CLEAR_SH_FFLAG_CHECKED(p->fflags);
    32503268              SL_RETURN(1, _("sh_hash_compdata"));
    32513269            }
     
    33163334    }
    33173335
    3318   p->visited = S_TRUE;
     3336  SET_SH_FFLAG_VISITED(p->fflags);
     3337  CLEAR_SH_FFLAG_CHECKED(p->fflags);
    33193338
    33203339  SL_RETURN(0, _("sh_hash_compdata"));
     
    33343353    {
    33353354      for (p = tab[i]; p; p = p->next)
    3336         p->allignore  = S_FALSE;
     3355        CLEAR_SH_FFLAG_ALLIGNORE(p->fflags);
    33373356    }
    33383357  SL_RETURN (0, _("sh_hash_compdata"));
     
    33623381          if (p->fullpath && 0 == strncmp(s, p->fullpath, len))
    33633382            {
    3364               p->allignore  = S_TRUE;
     3383              SET_SH_FFLAG_ALLIGNORE(p->fflags);
    33653384            }
    33663385        }
Note: See TracChangeset for help on using the changeset viewer.