]> git.sur5r.net Git - u-boot/blobdiff - tools/zynqmpimage.c
Merge git://git.denx.de/u-boot-usb
[u-boot] / tools / zynqmpimage.c
index 74bd5f5ccc3fea4a104f3c5d2ac540cab2d589e8..f48ac6dbe5056de5b36a1c99695908bfdeeadb41 100644 (file)
@@ -6,7 +6,7 @@
  *
  * The following Boot Header format/structures and values are defined in the
  * following documents:
- *   * ug1085 ZynqMP TRM (Chapter 9, Table 9-3)
+ *   * ug1085 ZynqMP TRM doc v1.4 (Chapter 11, Table 11-4)
  *
  * Expected Header Size = 0x9C0
  * Forced as 'little' endian, 32-bit words
@@ -245,16 +245,38 @@ static int zynqmpimage_check_image_types(uint8_t type)
        return EXIT_FAILURE;
 }
 
-static int fsize(FILE *fp)
+static uint32_t fsize(FILE *fp)
 {
-       int size;
-       int origin = ftell(fp);
+       int size, ret, origin;
+
+       origin = ftell(fp);
+       if (origin < 0) {
+               fprintf(stderr, "Incorrect file size\n");
+               fclose(fp);
+               exit(2);
+       }
+
+       ret = fseek(fp, 0L, SEEK_END);
+       if (ret) {
+               fprintf(stderr, "Incorrect file SEEK_END\n");
+               fclose(fp);
+               exit(3);
+       }
 
-       fseek(fp, 0L, SEEK_END);
        size = ftell(fp);
+       if (size < 0) {
+               fprintf(stderr, "Incorrect file size\n");
+               fclose(fp);
+               exit(4);
+       }
 
        /* going back */
-       fseek(fp, origin, SEEK_SET);
+       ret = fseek(fp, origin, SEEK_SET);
+       if (ret) {
+               fprintf(stderr, "Incorrect file SEEK_SET to %d\n", origin);
+               fclose(fp);
+               exit(3);
+       }
 
        return size;
 }