summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorguenther <>2014-04-20 22:31:55 +0000
committerguenther <>2014-04-20 22:31:55 +0000
commit6de4fe303d695d5fe59bc02038dbf0274979e6e7 (patch)
tree9157a7d5af788699849cbc641cfe83acf3b0d98e
parent0d73b4a5ca6658f8fa164bce1fee9552482afe31 (diff)
downloadopenbsd-6de4fe303d695d5fe59bc02038dbf0274979e6e7.tar.gz
openbsd-6de4fe303d695d5fe59bc02038dbf0274979e6e7.tar.bz2
openbsd-6de4fe303d695d5fe59bc02038dbf0274979e6e7.zip
Eliminate duplicated logic by switching from malloc+snprintf to asprintf
ok beck@
-rw-r--r--src/lib/libcrypto/dso/dso_dlfcn.c34
-rw-r--r--src/lib/libssl/src/crypto/dso/dso_dlfcn.c34
2 files changed, 28 insertions, 40 deletions
diff --git a/src/lib/libcrypto/dso/dso_dlfcn.c b/src/lib/libcrypto/dso/dso_dlfcn.c
index 245b9b1478..62b826ea43 100644
--- a/src/lib/libcrypto/dso/dso_dlfcn.c
+++ b/src/lib/libcrypto/dso/dso_dlfcn.c
@@ -307,30 +307,24 @@ static char *
307dlfcn_name_converter(DSO *dso, const char *filename) 307dlfcn_name_converter(DSO *dso, const char *filename)
308{ 308{
309 char *translated; 309 char *translated;
310 int len, rsize, transform; 310 int ret;
311 311
312 len = strlen(filename); 312 if (strchr(filename, '/') == NULL) {
313 rsize = len + 1; 313 /* Bare name, so convert to "%s.so" or "lib%s.so" */
314 transform = (strstr(filename, "/") == NULL);
315 if (transform) {
316 /* We will convert this to "%s.so" or "lib%s.so" etc */
317 rsize += DSO_extlen; /* The length of ".so" */
318 if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0) 314 if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
319 rsize += 3; /* The length of "lib" */ 315 ret = asprintf(&translated, "lib%s" DSO_ext, filename);
316 else
317 ret = asprintf(&translated, "%s" DSO_ext, filename);
318 if (ret == -1)
319 translated = NULL;
320 } else {
321 /* Full path, so just duplicate it */
322 translated = strdup(filename);
320 } 323 }
321 translated = malloc(rsize); 324
322 if (translated == NULL) { 325 if (translated == NULL)
323 DSOerr(DSO_F_DLFCN_NAME_CONVERTER, 326 DSOerr(DSO_F_DLFCN_NAME_CONVERTER,
324 DSO_R_NAME_TRANSLATION_FAILED); 327 DSO_R_NAME_TRANSLATION_FAILED);
325 return (NULL);
326 }
327 if (transform) {
328 if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
329 snprintf(translated, rsize, "lib%s" DSO_ext, filename);
330 else
331 snprintf(translated, rsize, "%s" DSO_ext, filename);
332 } else
333 snprintf(translated, rsize, "%s", filename);
334 return (translated); 328 return (translated);
335} 329}
336 330
diff --git a/src/lib/libssl/src/crypto/dso/dso_dlfcn.c b/src/lib/libssl/src/crypto/dso/dso_dlfcn.c
index 245b9b1478..62b826ea43 100644
--- a/src/lib/libssl/src/crypto/dso/dso_dlfcn.c
+++ b/src/lib/libssl/src/crypto/dso/dso_dlfcn.c
@@ -307,30 +307,24 @@ static char *
307dlfcn_name_converter(DSO *dso, const char *filename) 307dlfcn_name_converter(DSO *dso, const char *filename)
308{ 308{
309 char *translated; 309 char *translated;
310 int len, rsize, transform; 310 int ret;
311 311
312 len = strlen(filename); 312 if (strchr(filename, '/') == NULL) {
313 rsize = len + 1; 313 /* Bare name, so convert to "%s.so" or "lib%s.so" */
314 transform = (strstr(filename, "/") == NULL);
315 if (transform) {
316 /* We will convert this to "%s.so" or "lib%s.so" etc */
317 rsize += DSO_extlen; /* The length of ".so" */
318 if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0) 314 if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
319 rsize += 3; /* The length of "lib" */ 315 ret = asprintf(&translated, "lib%s" DSO_ext, filename);
316 else
317 ret = asprintf(&translated, "%s" DSO_ext, filename);
318 if (ret == -1)
319 translated = NULL;
320 } else {
321 /* Full path, so just duplicate it */
322 translated = strdup(filename);
320 } 323 }
321 translated = malloc(rsize); 324
322 if (translated == NULL) { 325 if (translated == NULL)
323 DSOerr(DSO_F_DLFCN_NAME_CONVERTER, 326 DSOerr(DSO_F_DLFCN_NAME_CONVERTER,
324 DSO_R_NAME_TRANSLATION_FAILED); 327 DSO_R_NAME_TRANSLATION_FAILED);
325 return (NULL);
326 }
327 if (transform) {
328 if ((DSO_flags(dso) & DSO_FLAG_NAME_TRANSLATION_EXT_ONLY) == 0)
329 snprintf(translated, rsize, "lib%s" DSO_ext, filename);
330 else
331 snprintf(translated, rsize, "%s" DSO_ext, filename);
332 } else
333 snprintf(translated, rsize, "%s", filename);
334 return (translated); 328 return (translated);
335} 329}
336 330