diff -r 000000000000 -r 56281d90869c walker.cxx --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/walker.cxx Sat Feb 12 13:45:55 2011 +0300 @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "walker.h" + +MagicWalker::MagicWalker(const std::string root) { + this->root = root; + magic = magic_open(MAGIC_MIME_TYPE); + magic_load(magic,NULL); +} + +int MagicWalker::HandleDir(const char *dirname) { + DIR *d = opendir(dirname); + if(!d) return errno; + + struct dirent *de; + while (de=readdir(d)) { + if(strcmp(de->d_name,".") && strcmp(de->d_name,"..")) { + //printf("%s/%s -- %d\n",dirname,de->d_name,de->d_type); + char next[MAXPATHLEN+1]; + snprintf(next,MAXPATHLEN,"%s/%s",dirname,de->d_name); + if (de->d_type&DT_DIR) + HandleDir(next); + else if (de->d_type&DT_REG) + HandleFile(next); + else + printf("%d %d\n",DT_REG,de->d_type); + } + } + closedir(d); + return 0; +} + +const char *MagicWalker::GetFileMagic(const char *fname) { + return magic_file(magic,fname); +} + +int MagicWalker::HandleFile(const char *fname) { + const char *rest = GetFileMagic(fname); + if (rest) + printf("%s\nMIMETYPE=%s\n\n",fname,rest); + else + printf("%s\nMIMETYPE=\n\n",fname); + return 0; +} + +MagicWalker::~MagicWalker () { + magic_close(magic); +} + +#ifdef MAIN_WALKER +int main(int argc, char *argv[]) { + MagicWalker f("/home/media/music"); + f.Run(); +} +#endif \ No newline at end of file