summaryrefslogtreecommitdiffstats
path: root/src/hash.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/hash.c')
-rw-r--r--src/hash.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/hash.c b/src/hash.c
index db79a06..4ee070c 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -17,6 +17,7 @@
*/
#include <stdio.h>
+#include <string.h>
#include "hash.h"
usho do_hash(usho *b, int len)
@@ -27,11 +28,12 @@ usho do_hash(usho *b, int len)
return result;
}
-usho do_hash_file(const char *filename)
+usho do_hash_file(const char *filename, const char *type)
{
unsigned char buf[BSIZE];
FILE *fd = fopen(filename, "r");
usho hash = 0;
+ int size;
int ret;
if (fd == NULL) {
@@ -46,8 +48,20 @@ usho do_hash_file(const char *filename)
hash ^= do_hash((usho *)&buf, ret);
} while(ret);
+ size = ftell(fd);
fclose(fd);
+ /* mmc image must be aligned */
+ if (type && strcmp(type, "mmc") == 0) {
+ int align = ((size >> 8) + 1) << 8;
+ printf("align from %d to %d\n", size, align);
+ buf[0] = 0xff;
+ while (size < align) {
+ hash ^= do_hash((usho *)&buf, 1);
+ ++size;
+ }
+ }
+
return hash;
}