diff options
author | guenther <> | 2014-04-20 22:31:55 +0000 |
---|---|---|
committer | guenther <> | 2014-04-20 22:31:55 +0000 |
commit | 6de4fe303d695d5fe59bc02038dbf0274979e6e7 (patch) | |
tree | 9157a7d5af788699849cbc641cfe83acf3b0d98e /src | |
parent | 0d73b4a5ca6658f8fa164bce1fee9552482afe31 (diff) | |
download | openbsd-6de4fe303d695d5fe59bc02038dbf0274979e6e7.tar.gz openbsd-6de4fe303d695d5fe59bc02038dbf0274979e6e7.tar.bz2 openbsd-6de4fe303d695d5fe59bc02038dbf0274979e6e7.zip |
Eliminate duplicated logic by switching from malloc+snprintf to asprintf
ok beck@
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/dso/dso_dlfcn.c | 34 | ||||
-rw-r--r-- | src/lib/libssl/src/crypto/dso/dso_dlfcn.c | 34 |
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 * | |||
307 | dlfcn_name_converter(DSO *dso, const char *filename) | 307 | dlfcn_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 * | |||
307 | dlfcn_name_converter(DSO *dso, const char *filename) | 307 | dlfcn_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 | ||