diff --git a/lsflib/src/md5recursive.c b/lsflib/src/md5recursive.c new file mode 100644 --- /dev/null +++ b/lsflib/src/md5recursive.c @@ -0,0 +1,69 @@ +/* + * $Id: md5recursive.c 94 2008-04-05 01:27:30Z mbroeker $ + * $URL: http://localhost/svn/c/lsflib/trunk/src/md5recursive.c $ + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +void md5recursive (char *root, int recursive) +{ + struct dirent *entry; + DIR *directory; + char *list; + unsigned char *value; + int i; + + if (!isDir (root)) + return; + + if ((directory = opendir (root)) == NULL) { + perror (root); + return; + } + + while ((entry = readdir (directory))) { + list = (char *)malloc (strlen (root) + 1 + strlen (entry->d_name) + 1); + + if (list == NULL) { + perror ("malloc"); + return; + } + + sprintf (list, "%s/%s", root, entry->d_name); + + if (!strcmp (entry->d_name, ".")) + continue; + + if (!strcmp (entry->d_name, "..")) + continue; + + if (isDir (list)) { + fprintf (stderr, "Directory: %s\n", list); + if (recursive) { + md5recursive (list, recursive); + } + continue; + } + + if ((value = md5sum (list)) == NULL) { + continue; + } + + for (i = 0; i < 16; i++) + printf ("%02x", value[i]); + printf (" %s\n", list); + free (value); + } + + free (list); + closedir (directory); +}