remove directory entry list sorting
authorDmitry Kasatkin <dmitry.kasatkin@intel.com>
Thu, 6 Sep 2012 10:36:41 +0000 (13:36 +0300)
committerDmitry Kasatkin <dmitry.kasatkin@intel.com>
Thu, 6 Sep 2012 11:08:54 +0000 (14:08 +0300)
Directory entries list sorting is not needed.
Entries are read always in the same order.

Signed-off-by: Dmitry Kasatkin <dmitry.kasatkin@intel.com>
src/evmctl.c

index ba9c20d..bac98a0 100644 (file)
@@ -546,18 +546,13 @@ static int add_file_hash(const char *file, EVP_MD_CTX *ctx)
        return 0;
 }
 
-struct dirent_list {
-       struct dirent_list *next;
-       struct dirent de;
-};
-
 static int add_dir_hash(const char *file, EVP_MD_CTX *ctx)
 {
        int err;
        struct dirent *de;
        DIR *dir;
-       struct dirent_list *head = NULL, *pos, *prev, *cur;
-       uint64_t ino;
+       unsigned long long ino, off;
+       unsigned int type;
 
        dir = opendir(file);
        if (!dir) {
@@ -566,40 +561,19 @@ static int add_dir_hash(const char *file, EVP_MD_CTX *ctx)
        }
 
        while ((de = readdir(dir))) {
-               /*log_debug("entry: ino: %lu, %s\n", de->d_ino, de->d_name);*/
-               for (prev = NULL, pos = head; pos; prev = pos, pos = pos->next) {
-                       if (de->d_ino < pos->de.d_ino)
-                               break;
-               }
-               cur = malloc(sizeof(*cur));
-               cur->de = *de;
-               cur->next = pos;
-               if (!head || !prev)
-                       head = cur;
-               else
-                       prev->next = cur;
-       }
-
-       for (cur = head; cur; cur = pos) {
-               pos = cur->next;
-               ino = cur->de.d_ino;
-               log_debug("entry: ino: %llu, %s\n", (unsigned long long)ino, cur->de.d_name);
-               err = EVP_DigestUpdate(ctx, cur->de.d_name, strlen(cur->de.d_name));
-               if (!err) {
-                       log_err("EVP_DigestUpdate() failed\n");
-                       return 1;
-               }
-               err = EVP_DigestUpdate(ctx, &ino, sizeof(ino));
-               if (!err) {
-                       log_err("EVP_DigestUpdate() failed\n");
-                       return 1;
-               }
-               err = EVP_DigestUpdate(ctx, &cur->de.d_type, sizeof(cur->de.d_type));
+               ino = de->d_ino;
+               off = de->d_off;
+               type = de->d_type;
+               log_debug("entry: %s, ino: %llu, type: %u, off: %llu, reclen: %hu\n",
+                         de->d_name, ino, type, off, de->d_reclen);
+               err = EVP_DigestUpdate(ctx, de->d_name, strlen(de->d_name));
+               /*err |= EVP_DigestUpdate(ctx, &off, sizeof(off));*/
+               err |= EVP_DigestUpdate(ctx, &ino, sizeof(ino));
+               err |= EVP_DigestUpdate(ctx, &type, sizeof(type));
                if (!err) {
                        log_err("EVP_DigestUpdate() failed\n");
                        return 1;
                }
-               free(cur);
        }
 
        closedir(dir);