--- /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 <sys/types.h>
+#include <sys/param.h>
+#include <dirent.h>
+#include <cerrno>
+#include <cassert>
+#include <cstdio>
+#include <cstring>
+#include <string>
+
+#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