lsflib/src/md5recursive.c
author Markus Bröker <mbroeker@largo.dyndns.tv>
Tue, 09 Mar 2010 12:58:27 +0100
changeset 122 50ba3b0e271a
parent 121 fef2ccfa7b12
child 136 d82f65e902d0
permissions -rw-r--r--
GNU Make and GNU Indent The Makefile depends on GNU tools and the user may choose the location committer: Markus Bröker <mbroeker@largo.homelinux.org>

/**
 * lsflib/src/md5recursive.c
 * Copyright (C) 2008 Markus Broeker
 */

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>

#include <lsf/lsf.h>

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);
}