Ignore:
Timestamp:
Feb 20, 2013, 7:30:02 PM (12 years ago)
Author:
katerina
Message:

Fix for tickets #329, #330, #331, #332

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_log_check.c

    r415 r425  
    577577 * Search rotated logfile
    578578 */
    579 #include <unistd.h>
    580 #include <libgen.h>
    581 #include <dirent.h>
    582 
    583 char * sh_rotated_log_search(const char * path, struct stat * buf)
    584 {
    585 
    586   size_t size;
    587   int    i;
    588   char * searchpath;
    589   struct stat sbuf;
    590   DIR  * dp;
    591   char * dname;
    592   char * bname;
    593 
    594   dname  = sh_util_dirname(path);
    595   bname  = sh_util_basename(path);
    596 
    597   size = strlen(dname) + strlen(bname) + 4;
    598   searchpath = SH_ALLOC(size);
    599 
    600   for (i = 0; i < 2; ++i)
    601     {
    602       snprintf(searchpath, size, "%s/%s.%1d", dname, bname, i);
    603       if (0 == stat(searchpath, &sbuf) && sbuf.st_ino == buf->st_ino)
    604         {
    605           SH_FREE(dname);
    606           SH_FREE(bname);
    607           return searchpath;
    608         }
    609     }
    610 
    611   SH_FREE(searchpath);
    612 
    613   if (NULL != (dp = opendir(dname)))
    614     {
    615       struct dirent * de;
    616 
    617       while (NULL != (de = readdir(dp)))
    618         {
    619           if (0 == strcmp(de->d_name, ".") || 0 == strcmp(de->d_name, ".."))
    620             continue;
    621 
    622           size = strlen(dname) + strlen(de->d_name) + 2;
    623           searchpath = SH_ALLOC(size);
    624           snprintf(searchpath, size, "%s/%s", dname, de->d_name);
    625 
    626           if (0 == stat(searchpath, &sbuf) && sbuf.st_ino == buf->st_ino)
    627             {
    628               SH_FREE(dname);
    629               SH_FREE(bname);
    630               closedir(dp);
    631               return searchpath;
    632             }
    633          
    634           SH_FREE(searchpath);
    635         }
    636       closedir(dp);
    637     }
    638 
    639   SH_FREE(dname);
    640   SH_FREE(bname);
    641 
    642   return NULL;
    643 }
     579extern char * sh_rotated_log_search(const char * path, struct stat * buf);
     580
    644581
    645582/* Open file, position at stored offset
Note: See TracChangeset for help on using the changeset viewer.