Changeset 1770 in MondoRescue for branches/stable/mindi-busybox/coreutils/md5_sha1_sum.c
- Timestamp:
- Nov 6, 2007, 11:01:53 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/mindi-busybox/coreutils/md5_sha1_sum.c
r902 r1770 7 7 */ 8 8 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" 18 10 19 11 typedef enum { HASH_SHA1, HASH_MD5 } hash_algo_t; … … 25 17 /* This might be useful elsewhere */ 26 18 static unsigned char *hash_bin_to_hex(unsigned char *hash_value, 27 unsigned charhash_length)19 unsigned hash_length) 28 20 { 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; 38 25 } 39 26 … … 50 37 void (*final)(void*, void*); 51 38 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 } 57 45 } 58 46 … … 72 60 } 73 61 74 while (0 < (count = read(src_fd, in_buf, 4096))) {62 while (0 < (count = safe_read(src_fd, in_buf, 4096))) { 75 63 update(in_buf, count, &context); 76 64 } … … 90 78 } 91 79 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)80 int md5_sha1_sum_main(int argc, char **argv); 81 int md5_sha1_sum_main(int argc, char **argv) 94 82 { 95 83 int return_value = EXIT_SUCCESS; 96 84 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; 98 89 99 90 if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK) 100 flags = bb_getopt_ulflags(argc,argv, "scw");91 flags = getopt32(argv, "scw"); 101 92 else optind = 1; 102 93 … … 104 95 if (flags & FLAG_SILENT) { 105 96 bb_error_msg_and_die 106 (" the -s option is meaningful only when verifying checksums");97 ("-%c is meaningful only when verifying checksums", 's'); 107 98 } else if (flags & FLAG_WARN) { 108 99 bb_error_msg_and_die 109 (" the -w option is meaningful only when verifying checksums");100 ("-%c is meaningful only when verifying checksums", 'w'); 110 101 } 111 102 } 112 103 113 104 if (argc == optind) { 114 argv[argc++] = "-";105 argv[argc++] = (char*)"-"; 115 106 } 116 107 117 if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && flags & FLAG_CHECK) {108 if (ENABLE_FEATURE_MD5_SHA1_SUM_CHECK && (flags & FLAG_CHECK)) { 118 109 FILE *pre_computed_stream; 119 110 int count_total = 0; … … 127 118 } 128 119 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"); 133 123 } 134 124 135 while ((line = bb_get_chomped_line_from_file(pre_computed_stream)) != NULL) {125 while ((line = xmalloc_getline(pre_computed_stream)) != NULL) { 136 126 char *filename_ptr; 137 127 138 128 count_total++; 139 129 filename_ptr = strstr(line, " "); 130 /* handle format for binary checksums */ 131 if (filename_ptr == NULL) { 132 filename_ptr = strstr(line, " *"); 133 } 140 134 if (filename_ptr == NULL) { 141 135 if (flags & FLAG_WARN) { 142 bb_error_msg(" Invalid format");136 bb_error_msg("invalid format"); 143 137 } 144 138 count_failed++; … … 169 163 count_failed, count_total); 170 164 } 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); 173 168 } 169 */ 174 170 } else { 175 171 while (optind < argc) { … … 185 181 } 186 182 } 187 return (return_value);183 return return_value; 188 184 } 189 190 #ifdef CONFIG_MD5SUM191 int md5sum_main(int argc, char **argv)192 {193 return (hash_files(argc, argv, HASH_MD5));194 }195 #endif196 197 #ifdef CONFIG_SHA1SUM198 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.