Ignore:
Timestamp:
Nov 4, 2007, 3:16:40 AM (16 years ago)
Author:
Bruno Cornec
Message:

Update to busybox 1.7.2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.5/mindi-busybox/coreutils/md5_sha1_sum.c

    r902 r1765  
    77 */
    88
    9 #include <fcntl.h>
    10 #include <limits.h>
    11 #include <stdio.h>
    12 #include <stdint.h>
    13 #include <stdlib.h>
    14 #include <string.h>
    15 #include <unistd.h>
    16 
    17 #include "busybox.h"
     9#include "libbb.h"
    1810
    1911typedef enum { HASH_SHA1, HASH_MD5 } hash_algo_t;
     
    2517/* This might be useful elsewhere */
    2618static unsigned char *hash_bin_to_hex(unsigned char *hash_value,
    27                                       unsigned char hash_length)
     19                unsigned hash_length)
    2820{
    29     int x, len, max;
    30     unsigned char *hex_value;
    31 
    32     max = (hash_length * 2) + 2;
    33     hex_value = xmalloc(max);
    34     for (x = len = 0; x < hash_length; x++) {
    35         len += snprintf((char*)(hex_value + len), max - len, "%02x", hash_value[x]);
    36     }
    37     return (hex_value);
     21    /* xzalloc zero-terminates */
     22    char *hex_value = xzalloc((hash_length * 2) + 1);
     23    bin2hex(hex_value, (char*)hash_value, hash_length);
     24    return hex_value;
    3825}
    3926
     
    5037    void (*final)(void*, void*);
    5138
    52     if (strcmp(filename, "-") == 0) {
    53         src_fd = STDIN_FILENO;
    54     } else if(0 > (src_fd = open(filename, O_RDONLY))) {
    55         bb_perror_msg("%s", filename);
    56         return NULL;
     39    src_fd = STDIN_FILENO;
     40    if (NOT_LONE_DASH(filename)) {
     41        src_fd = open_or_warn(filename, O_RDONLY);
     42        if (src_fd < 0) {
     43            return NULL;
     44        }
    5745    }
    5846
     
    7260    }
    7361
    74     while (0 < (count = read(src_fd, in_buf, 4096))) {
     62    while (0 < (count = safe_read(src_fd, in_buf, 4096))) {
    7563        update(in_buf, count, &context);
    7664    }
     
    9078}
    9179
    92 /* This could become a common function for md5 as well, by using md5_stream */
    93 static int hash_files(int argc, char **argv, hash_algo_t hash_algo)
     80int md5_sha1_sum_main(int argc, char **argv);
     81int md5_sha1_sum_main(int argc, char **argv)
    9482{
    9583    int return_value = EXIT_SUCCESS;
    9684    uint8_t *hash_value;
    97     unsigned int flags;
     85    unsigned flags;
     86    hash_algo_t hash_algo = ENABLE_MD5SUM
     87        ? (ENABLE_SHA1SUM ? (applet_name[0] == 'm' ? HASH_MD5 : HASH_SHA1) : HASH_MD5)
     88        : HASH_SHA1;
    9889
    9990    if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK)
    100         flags = bb_getopt_ulflags(argc, argv, "scw");
     91        flags = getopt32(argv, "scw");
    10192    else optind = 1;
    10293
     
    10495        if (flags & FLAG_SILENT) {
    10596            bb_error_msg_and_die
    106                 ("the -s option is meaningful only when verifying checksums");
     97                ("-%c is meaningful only when verifying checksums", 's');
    10798        } else if (flags & FLAG_WARN) {
    10899            bb_error_msg_and_die
    109                 ("the -w option is meaningful only when verifying checksums");
     100                ("-%c is meaningful only when verifying checksums", 'w');
    110101        }
    111102    }
    112103
    113104    if (argc == optind) {
    114         argv[argc++] = "-";
     105        argv[argc++] = (char*)"-";
    115106    }
    116107
    117     if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && flags & FLAG_CHECK) {
     108    if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) {
    118109        FILE *pre_computed_stream;
    119110        int count_total = 0;
     
    127118        }
    128119
    129         if (strcmp(file_ptr, "-") == 0) {
    130             pre_computed_stream = stdin;
    131         } else {
    132             pre_computed_stream = bb_xfopen(file_ptr, "r");
     120        pre_computed_stream = stdin;
     121        if (NOT_LONE_DASH(file_ptr)) {
     122            pre_computed_stream = xfopen(file_ptr, "r");
    133123        }
    134124
    135         while ((line = bb_get_chomped_line_from_file(pre_computed_stream)) != NULL) {
     125        while ((line = xmalloc_getline(pre_computed_stream)) != NULL) {
    136126            char *filename_ptr;
    137127
    138128            count_total++;
    139129            filename_ptr = strstr(line, "  ");
     130            /* handle format for binary checksums */
     131            if (filename_ptr == NULL) {
     132                filename_ptr = strstr(line, " *");
     133            }
    140134            if (filename_ptr == NULL) {
    141135                if (flags & FLAG_WARN) {
    142                     bb_error_msg("Invalid format");
     136                    bb_error_msg("invalid format");
    143137                }
    144138                count_failed++;
     
    169163                         count_failed, count_total);
    170164        }
    171         if (bb_fclose_nonstdin(pre_computed_stream) == EOF) {
    172             bb_perror_msg_and_die("Couldnt close file %s", file_ptr);
     165        /*
     166        if (fclose_if_not_stdin(pre_computed_stream) == EOF) {
     167            bb_perror_msg_and_die("cannot close file %s", file_ptr);
    173168        }
     169        */
    174170    } else {
    175171        while (optind < argc) {
     
    185181        }
    186182    }
    187     return (return_value);
     183    return return_value;
    188184}
    189 
    190 #ifdef CONFIG_MD5SUM
    191 int md5sum_main(int argc, char **argv)
    192 {
    193     return (hash_files(argc, argv, HASH_MD5));
    194 }
    195 #endif
    196 
    197 #ifdef CONFIG_SHA1SUM
    198 int sha1sum_main(int argc, char **argv)
    199 {
    200     return (hash_files(argc, argv, HASH_SHA1));
    201 }
    202 #endif
Note: See TracChangeset for help on using the changeset viewer.