Changeset 17582 in niluje


Ignore:
Timestamp:
Jul 28, 2020, 8:54:58 PM (11 days ago)
Author:
NiLuJe
Message:

MobiCover:

  • Switch to nettle for SHA1/HEX
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Configs/trunk/Kindle/Touch_Hacks/MobiCover/LibMobi/mobicover.c

    r17581 r17582  
    5151                        uid          = first_resource;
    5252                        broken_cover = true;
    53                         printf(
     53                        fprintf(
     54                            stderr,
    5455                            "Warning: EXTH CoverOffset is a NULL pointer, discarding it and assuming the first resource record has the cover!\n",
    5556                            uid);
     
    5859                uid          = first_resource;
    5960                broken_cover = true;
    60                 printf(
     61                fprintf(
     62                    stderr,
    6163                    "Warning: could not determine cover location (CoverOffset missing from EXTH), assuming the first resource record has the cover!\n",
    6264                    uid);
     
    8385                } else if (memcmp(record->data, gif_magic, 4) == 0) {
    8486                        if (broken_cover) {
    85                                 printf("Resource record %u did not appear to be the cover image (it's a gif). . .\n",
    86                                        record->uid);
     87                                fprintf(stderr,
     88                                        "Resource record %u did not appear to be the cover image (it's a gif). . .\n",
     89                                        record->uid);
    8790                                continue;
    8891                        }
     
    9295                } else if (record->size >= 8 && memcmp(record->data, png_magic, 8) == 0) {
    9396                        if (broken_cover) {
    94                                 printf("Resource record %u did not appear to be the cover image (it's a png). . .\n",
    95                                        record->uid);
     97                                fprintf(stderr,
     98                                        "Resource record %u did not appear to be the cover image (it's a png). . .\n",
     99                                        record->uid);
    96100                                continue;
    97101                        }
     
    104108                        if (record->size == bmp_size) {
    105109                                if (broken_cover) {
    106                                         printf(
     110                                        fprintf(
     111                                            stderr,
    107112                                            "Resource record %u did not appear to be the cover image (it's a bmp). . .\n",
    108113                                            record->uid);
     
    114119                        }
    115120                } else {
    116                         printf("Cover not found in record %u\n", record->uid);
     121                        fprintf(stderr, "Cover not found in record %u\n", record->uid);
    117122                        continue;
    118123                }
     
    120125
    121126        if (!cover_found) {
    122                 printf("Unable to find a cover!\n");
     127                fprintf(stderr, "Unable to find a cover!\n");
    123128                return ERRCODE(EXIT_FAILURE);
    124129        }
     
    137142                (void) realpath(fullpath, abspath);
    138143
    139                 unsigned char hash[SHA1_DIGEST_SIZE];
    140                 SHA1_CTX      ctx;
    141                 SHA1_Init(&ctx);
    142                 SHA1_Update(&ctx, abspath, strlen(abspath));
    143                 SHA1_Final(&ctx, hash);
    144 
    145                 // c.f., https://git.lysator.liu.se/nettle/nettle/-/blob/master/base16-encode.c
    146                 static const uint8_t hex_digits[16] = "0123456789abcdef";
    147 #define DIGIT(x) (hex_digits[(x) &0xf])
    148                 char     hex_hash[SHA1_DIGEST_SIZE * 2] = { 0 };
    149                 uint8_t* src                            = hash;
    150                 char*    dst                            = hex_hash;
    151                 for (size_t i = 0; i < SHA1_DIGEST_SIZE; i++, dst += 2) {
    152                         dst[0] = DIGIT(src[i] / 0x10);
    153                         dst[1] = DIGIT(src[i]);
    154                 }
     144                struct sha1_ctx sha1;
     145                uint8_t         digest[SHA1_DIGEST_SIZE];
     146                sha1_init(&sha1);
     147                sha1_update(&sha1, strlen(abspath), abspath);
     148                sha1_digest(&sha1, SHA1_DIGEST_SIZE, digest);
     149
     150                char hex_hash[BASE16_ENCODE_LENGTH(SHA1_DIGEST_SIZE)] = { 0 };
     151                base16_encode_update(hex_hash, SHA1_DIGEST_SIZE, digest);
    155152
    156153                cdekey = hex_hash;
     
    164161        free(asin);
    165162
    166         printf("Saving cover to %s\n", cover_path);
     163        fprintf(stderr, "Saving cover to %s\n", cover_path);
    167164        errno      = 0;
    168165        FILE* file = fopen(cover_path, "wb");
    169166        if (file == NULL) {
    170                 int errsv = errno;
    171                 printf("Could not open file for writing: %s (%s)\n", cover_path, strerror(errsv));
     167                fprintf(stderr, "Could not open file for writing: %s (fopen: %m)\n", cover_path);
    172168                return ERRCODE(EXIT_FAILURE);
    173169        }
    174170        size_t count = fwrite(record->data, 1, record->size, file);
    175171        if (count != record->size) {
    176                 int errsv = errno;
    177                 printf("Error writing to file: %s (%s)\n", cover_path, strerror(errsv));
     172                fprintf(stderr, "Error writing to file: %s (fwrite: %m)\n", cover_path);
    178173                fclose(file);
    179174                return ERRCODE(EXIT_FAILURE);
     
    259254                        MOBIData* m = mobi_init();
    260255                        if (m == NULL) {
    261                                 fprintf(strerror, "Memory allocation failed\n");
     256                                fprintf(stderr, "Memory allocation failed\n");
    262257                                return ERRCODE(EXIT_FAILURE);
    263258                        }
     
    266261                        FILE* file = fopen(infile, "rb");
    267262                        if (file == NULL) {
    268                                 fprintf(strerror, "Error opening file: %s (fopen: %m)\n", infile);
     263                                fprintf(stderr, "Error opening file: %s (fopen: %m)\n", infile);
    269264                                mobi_free(m);
    270265                                return ERRCODE(EXIT_FAILURE);
     
    276271                        fclose(file);
    277272                        if (mobi_ret != MOBI_SUCCESS) {
    278                                 fprintf(strerror, "Error while loading document: %s\n", libmobi_msg(mobi_ret));
     273                                fprintf(stderr, "Error while loading document: %s\n", libmobi_msg(mobi_ret));
    279274                                mobi_free(m);
    280275                                return ERRCODE(EXIT_FAILURE);
     
    286281                        mobi_free(m);
    287282                        if (rv != EXIT_SUCCESS) {
    288                                 fprintf(strerror, "Failed to dump cover for file: %s\n", infile);
     283                                fprintf(stderr, "Failed to dump cover for file: %s\n", infile);
    289284                                return ERRCODE(EXIT_FAILURE);
    290285                        }
Note: See TracChangeset for help on using the changeset viewer.