summaryrefslogtreecommitdiff
path: root/libtomcrypt/src/misc/crypt/crypt_sizes.c
diff options
context:
space:
mode:
Diffstat (limited to 'libtomcrypt/src/misc/crypt/crypt_sizes.c')
-rw-r--r--libtomcrypt/src/misc/crypt/crypt_sizes.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/libtomcrypt/src/misc/crypt/crypt_sizes.c b/libtomcrypt/src/misc/crypt/crypt_sizes.c
index 79b3bd4..dd857ea 100644
--- a/libtomcrypt/src/misc/crypt/crypt_sizes.c
+++ b/libtomcrypt/src/misc/crypt/crypt_sizes.c
@@ -307,19 +307,16 @@ int crypt_get_size(const char* namein, unsigned int *sizeout) {
int crypt_list_all_sizes(char *names_list, unsigned int *names_list_size) {
int i;
unsigned int total_len = 0;
- char number[32], *ptr;
+ char *ptr;
int number_len;
int count = sizeof(_crypt_sizes) / sizeof(_crypt_sizes[0]);
/* calculate amount of memory required for the list */
for (i=0; i<count; i++) {
- total_len += (unsigned int)strlen(_crypt_sizes[i].name) + 1;
- /* the above +1 is for the commas */
- number_len = snprintf(number, sizeof(number), "%u", _crypt_sizes[i].size);
- if ((number_len < 0) ||
- ((unsigned int)number_len >= sizeof(number)))
+ number_len = snprintf(NULL, 0, "%s,%u\n", _crypt_sizes[i].name, _crypt_sizes[i].size);
+ if (number_len < 0)
return -1;
- total_len += (unsigned int)strlen(number) + 1;
+ total_len += number_len;
/* this last +1 is for newlines (and ending NULL) */
}
@@ -332,16 +329,11 @@ int crypt_list_all_sizes(char *names_list, unsigned int *names_list_size) {
/* build the names list */
ptr = names_list;
for (i=0; i<count; i++) {
- strcpy(ptr, _crypt_sizes[i].name);
- ptr += strlen(_crypt_sizes[i].name);
- strcpy(ptr, ",");
- ptr += 1;
-
- number_len = snprintf(number, sizeof(number), "%u", _crypt_sizes[i].size);
- strcpy(ptr, number);
+ number_len = snprintf(ptr, total_len, "%s,%u\n", _crypt_sizes[i].name, _crypt_sizes[i].size);
+ if (number_len < 0) return -1;
+ if ((unsigned int)number_len > total_len) return -1;
+ total_len -= number_len;
ptr += number_len;
- strcpy(ptr, "\n");
- ptr += 1;
}
/* to remove the trailing new-line */
ptr -= 1;