walker.cxx
changeset 0 56281d90869c
equal deleted inserted replaced
-1:000000000000 0:56281d90869c
       
     1 #include <sys/types.h>
       
     2 #include <sys/param.h>
       
     3 #include <dirent.h>
       
     4 #include <cerrno>
       
     5 #include <cassert>
       
     6 #include <cstdio>
       
     7 #include <cstring>
       
     8 #include <string>
       
     9 
       
    10 #include "walker.h"
       
    11 
       
    12 MagicWalker::MagicWalker(const std::string root) {
       
    13     this->root = root;
       
    14     magic = magic_open(MAGIC_MIME_TYPE);
       
    15     magic_load(magic,NULL);
       
    16 }
       
    17 
       
    18 int MagicWalker::HandleDir(const char *dirname) {
       
    19     DIR *d = opendir(dirname);
       
    20     if(!d) return errno;
       
    21 
       
    22     struct dirent *de;
       
    23     while (de=readdir(d)) {
       
    24         if(strcmp(de->d_name,".") && strcmp(de->d_name,"..")) {
       
    25             //printf("%s/%s -- %d\n",dirname,de->d_name,de->d_type);
       
    26             char next[MAXPATHLEN+1];
       
    27             snprintf(next,MAXPATHLEN,"%s/%s",dirname,de->d_name);
       
    28             if (de->d_type&DT_DIR)
       
    29                 HandleDir(next);
       
    30             else if (de->d_type&DT_REG)
       
    31                 HandleFile(next);
       
    32             else
       
    33                 printf("%d %d\n",DT_REG,de->d_type);
       
    34         }
       
    35     }
       
    36     closedir(d);
       
    37     return 0;
       
    38 }
       
    39 
       
    40 const char *MagicWalker::GetFileMagic(const char *fname) {
       
    41     return magic_file(magic,fname);
       
    42 }
       
    43 
       
    44 int MagicWalker::HandleFile(const char *fname) {
       
    45     const char *rest = GetFileMagic(fname);
       
    46     if (rest)
       
    47         printf("%s\nMIMETYPE=%s\n\n",fname,rest);
       
    48     else
       
    49         printf("%s\nMIMETYPE=\n\n",fname);
       
    50     return 0;
       
    51 }
       
    52         
       
    53 MagicWalker::~MagicWalker () {
       
    54     magic_close(magic);
       
    55 }
       
    56 
       
    57 #ifdef MAIN_WALKER
       
    58 int main(int argc, char *argv[]) {
       
    59     MagicWalker f("/home/media/music");
       
    60     f.Run();
       
    61 }
       
    62 #endif