From: Francois Fleuret Date: Thu, 18 Mar 2010 08:23:08 +0000 (+0100) Subject: Changed all the sprintf into snprintf, removed an unused routine. X-Git-Url: https://www.fleuret.org/cgi-bin/gitweb/gitweb.cgi?p=dus.git;a=commitdiff_plain;h=eca27b58c4fbc0a771edf635ccc726eb89699589 Changed all the sprintf into snprintf, removed an unused routine. --- diff --git a/dus.c b/dus.c index d361712..08cd183 100644 --- a/dus.c +++ b/dus.c @@ -88,21 +88,6 @@ int ignore_entry(const char *name) { (ignore_dotfiles && name[0] == '.'); } -void print_size_sum(size_sum_t s) { - char tmp[128]; - char *a = tmp + sizeof(tmp)/sizeof(char); - *(--a) = '\0'; - if(s) { - while(s) { - *(--a) = s%10 + '0'; - s /= 10; - } - } else { - *(--a) = '0'; - } - printf("%s", a); -} - size_sum_t entry_size(const char *name) { DIR *dir; struct dirent *dir_e; @@ -219,18 +204,18 @@ int compare_files(const void *x1, const void *x2) { } } -void raw_print(char *buffer, char *filename, size_sum_t size) { +void raw_print(char *buffer, size_t buffer_size, char *filename, size_sum_t size) { char *a, *b, *c, u; b = buffer; - if(size) { - while(size) { - *(b++) = size%10 + '0'; - size /= 10; + do { + if(b >= buffer + buffer_size) { + fprintf(stderr, "Buffer overflow in raw_print (hu?!).\n"); + exit(EXIT_FAILURE); } - } else { - *(b++) = '0'; - } + *(b++) = size%10 + '0'; + size /= 10; + } while(size); a = buffer; c = b; @@ -242,30 +227,34 @@ void raw_print(char *buffer, char *filename, size_sum_t size) { *(b++) = ' '; - sprintf(b, "%s\n", filename); + snprintf(b, buffer_size - (b - buffer), "%s\n", filename); } -void fancy_print(char *buffer, char *filename, size_sum_t size) { +void fancy_print(char *buffer, size_t buffer_size, char *filename, size_sum_t size) { if(size < 1024) { - sprintf(buffer, - "% 7d -- %s\n", - ((int) size), - filename); + snprintf(buffer, + buffer_size, + "% 7d -- %s\n", + ((int) size), + filename); } else if(size < 1024 * 1024) { - sprintf(buffer, - "% 6.1fK -- %s\n", - ((double) (size))/(1024.0), - filename); + snprintf(buffer, + buffer_size, + "% 6.1fK -- %s\n", + ((double) (size))/(1024.0), + filename); } else if(size < 1024 * 1024 * 1024) { - sprintf(buffer, - "% 6.1fM -- %s\n", - ((double) (size))/(1024.0 * 1024), - filename); + snprintf(buffer, + buffer_size, + "% 6.1fM -- %s\n", + ((double) (size))/(1024.0 * 1024), + filename); } else { - sprintf(buffer, - "% 6.1fG -- %s\n", - ((double) (size))/(1024.0 * 1024.0 * 1024.0), - filename); + snprintf(buffer, + buffer_size, + "% 6.1fG -- %s\n", + ((double) (size))/(1024.0 * 1024.0 * 1024.0), + filename); } } @@ -318,11 +307,16 @@ void print_sorted(struct entry_node *root, int width, int height) { first = nb_nodes - n; } + /* I do not like valgrind to complain about uninitialized data */ + if(width < BUFFER_SIZE) { + line[width] = '\0'; + } + for(n = first; n < last; n++) { if(fancy_size_display) { - fancy_print(line, nodes[n]->name, nodes[n]->size); + fancy_print(line, BUFFER_SIZE, nodes[n]->name, nodes[n]->size); } else { - raw_print(line, nodes[n]->name, nodes[n]->size); + raw_print(line, BUFFER_SIZE, nodes[n]->name, nodes[n]->size); } if(width >= 1 && width + 1 < BUFFER_SIZE && line[width]) { line[width] = '\n';