diff options
author | Greg Hudson <ghudson@mit.edu> | 2011-09-28 16:05:04 +0000 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2011-09-28 16:05:04 +0000 |
commit | e3a33e5bb36c02c6646f80e3a8dd17532f4e3756 (patch) | |
tree | 841a5b07f9f6d453a95596efc494ddbb965aba8d /src | |
parent | 084534554ea24fbf673ea568d43247a7109c7596 (diff) | |
download | krb5-e3a33e5bb36c02c6646f80e3a8dd17532f4e3756.tar.gz krb5-e3a33e5bb36c02c6646f80e3a8dd17532f4e3756.tar.xz krb5-e3a33e5bb36c02c6646f80e3a8dd17532f4e3756.zip |
Update verto.c to 2011-09-28 version
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25240 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r-- | src/util/verto/verto.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/util/verto/verto.c b/src/util/verto/verto.c index 0f015d8968..34d453c702 100644 --- a/src/util/verto/verto.c +++ b/src/util/verto/verto.c @@ -44,7 +44,6 @@ #include <verto-module.h> #ifdef WIN32 -#define pdlmsuffix ".dll" #define pdlmtype HMODULE #define pdlopenl(filename) LoadLibraryEx(filename, NULL, \ DONT_RESOLVE_DLL_REFERENCES) @@ -102,7 +101,6 @@ pdladdrmodname(void *addr, char **buf) { return true; } #else -#define pdlmsuffix ".so" #define pdlmtype void * #define pdlopenl(filename) dlopen(filename, RTLD_LAZY | RTLD_LOCAL) #define pdlclose(module) dlclose((pdlmtype) module) @@ -185,7 +183,7 @@ struct _verto_ev { const verto_module *defmodule; static int -_vasprintf(char **strp, const char *fmt, va_list ap) { +int_vasprintf(char **strp, const char *fmt, va_list ap) { va_list apc; int size = 0; @@ -200,12 +198,12 @@ _vasprintf(char **strp, const char *fmt, va_list ap) { } static int -_asprintf(char **strp, const char *fmt, ...) { +int_asprintf(char **strp, const char *fmt, ...) { va_list ap; int size = 0; va_start(ap, fmt); - size = _vasprintf(strp, fmt, ap); + size = int_vasprintf(strp, fmt, ap); va_end(ap); return size; } @@ -279,7 +277,7 @@ do_load_dir(const char *dirname, const char *prefix, const char *suffix, if (flen < slen || strcmp(ent->d_name + flen - slen, suffix)) continue; - if (_asprintf(&tmp, "%s/%s", dirname, ent->d_name) < 0) + if (int_asprintf(&tmp, "%s/%s", dirname, ent->d_name) < 0) continue; success = do_load_file(tmp, reqsym, reqtypes, dll, module); @@ -310,12 +308,21 @@ load_module(const char *impl, verto_ev_type reqtypes, pdlmtype *dll, * impl == glib * suffix == .so.0 * Put them all together: /usr/lib/libverto-glib.so.0 */ - suffix = strstr(prefix, pdlmsuffix); + tmp = strdup(prefix); + if (!tmp) { + free(prefix); + return 0; + } + + suffix = basename(tmp); + suffix = strchr(suffix, '.'); if (!suffix || strlen(suffix) < 1 || !(suffix = strdup(suffix))) { free(prefix); + free(tmp); return 0; } strcpy(prefix + strlen(prefix) - strlen(suffix), "-"); + free(tmp); if (impl) { /* Try to do a load by the path */ @@ -324,7 +331,7 @@ load_module(const char *impl, verto_ev_type reqtypes, pdlmtype *dll, if (!success) { /* Try to do a load by the name */ tmp = NULL; - if (_asprintf(&tmp, "%s%s%s", prefix, impl, suffix) > 0) { + if (int_asprintf(&tmp, "%s%s%s", prefix, impl, suffix) > 0) { success = do_load_file(tmp, 0, reqtypes, dll, module); free(tmp); } |