From 22452046856632bfed575c0c282bec8769869a98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mois=C3=A9s=20Guimar=C3=A3es?= Date: Mon, 21 Jul 2014 22:42:11 -0300 Subject: [PATCH] crl: refactoring LoadCRL to reduce stack usage: --- variable name moved to the heap (256 bytes saved) --- src/crl.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/crl.c b/src/crl.c index fe63615ce..5ffe8c637 100644 --- a/src/crl.c +++ b/src/crl.c @@ -694,8 +694,13 @@ static int StartMonitorCRL(CYASSL_CRL* crl) int LoadCRL(CYASSL_CRL* crl, const char* path, int type, int monitor) { struct dirent* entry; - DIR* dir; - int ret = SSL_SUCCESS; + DIR* dir; + int ret = SSL_SUCCESS; +#ifdef CYASSL_SMALL_STACK + char* name; +#else + char name[MAX_FILENAME_SZ]; +#endif CYASSL_ENTER("LoadCRL"); if (crl == NULL) @@ -706,11 +711,17 @@ int LoadCRL(CYASSL_CRL* crl, const char* path, int type, int monitor) CYASSL_MSG("opendir path crl load failed"); return BAD_PATH_ERROR; } + +#ifdef CYASSL_SMALL_STACK + name = (char*)XMALLOC(MAX_FILENAME_SZ, NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (name == NULL) + return MEMORY_E; +#endif + while ( (entry = readdir(dir)) != NULL) { - char name[MAX_FILENAME_SZ]; struct stat s; - XMEMSET(name, 0, sizeof(name)); + XMEMSET(name, 0, MAX_FILENAME_SZ); XSTRNCPY(name, path, MAX_FILENAME_SZ/2 - 2); XSTRNCAT(name, "/", 1); XSTRNCAT(name, entry->d_name, MAX_FILENAME_SZ/2); @@ -743,6 +754,10 @@ int LoadCRL(CYASSL_CRL* crl, const char* path, int type, int monitor) } } +#ifdef CYASSL_SMALL_STACK + XFREE(name, NULL, DYNAMIC_TYPE_TMP_BUFFER); +#endif + if (monitor & CYASSL_CRL_MONITOR) { CYASSL_MSG("monitor path requested");