diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-08-03 23:12:03 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-08-03 23:12:03 +0000 |
commit | 75e75df48fcb787b355a4f940334edfe50a5ff1f (patch) | |
tree | 255e0de37c6992b80074c7552faeb318af71337c | |
parent | 4f311ae2ea4b9c12b8d5a202b5bc2e2ea3649c40 (diff) | |
download | libextractor-75e75df48fcb787b355a4f940334edfe50a5ff1f.tar.gz libextractor-75e75df48fcb787b355a4f940334edfe50a5ff1f.zip |
make lib finding more robust
-rw-r--r-- | src/main/extractor_plugpath.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/main/extractor_plugpath.c b/src/main/extractor_plugpath.c index c8abff9..48397e3 100644 --- a/src/main/extractor_plugpath.c +++ b/src/main/extractor_plugpath.c | |||
@@ -504,6 +504,7 @@ find_plugin_in_path (void *cls, | |||
504 | const char *sym_name; | 504 | const char *sym_name; |
505 | char *sym; | 505 | char *sym; |
506 | char *dot; | 506 | char *dot; |
507 | size_t dlen; | ||
507 | 508 | ||
508 | if (NULL != sc->path) | 509 | if (NULL != sc->path) |
509 | return; | 510 | return; |
@@ -513,8 +514,10 @@ find_plugin_in_path (void *cls, | |||
513 | { | 514 | { |
514 | if ('.' == ent->d_name[0]) | 515 | if ('.' == ent->d_name[0]) |
515 | continue; | 516 | continue; |
516 | if ( (NULL == strstr (ent->d_name, ".so")) && | 517 | dlen = strlen (ent->d_name); |
517 | (NULL == strstr (ent->d_name, ".dll")) ) | 518 | if ( (dlen < 4) || |
519 | ( (0 != strcmp (&ent->d_name[dlen-3], ".so")) && | ||
520 | (0 != strcasecmp (&ent->d_name[dlen-4], ".dll")) ) ) | ||
518 | continue; /* only load '.so' and '.dll' */ | 521 | continue; /* only load '.so' and '.dll' */ |
519 | if (NULL == (sym_name = strrchr (ent->d_name, '_'))) | 522 | if (NULL == (sym_name = strrchr (ent->d_name, '_'))) |
520 | continue; | 523 | continue; |
@@ -590,6 +593,7 @@ load_plugins_from_dir (void *cls, | |||
590 | const char *sym_name; | 593 | const char *sym_name; |
591 | char *sym; | 594 | char *sym; |
592 | char *dot; | 595 | char *dot; |
596 | size_t dlen; | ||
593 | 597 | ||
594 | if (NULL == (dir = opendir (path))) | 598 | if (NULL == (dir = opendir (path))) |
595 | return; | 599 | return; |
@@ -597,8 +601,10 @@ load_plugins_from_dir (void *cls, | |||
597 | { | 601 | { |
598 | if (ent->d_name[0] == '.') | 602 | if (ent->d_name[0] == '.') |
599 | continue; | 603 | continue; |
600 | if ( (NULL == strstr (ent->d_name, ".so")) && | 604 | dlen = strlen (ent->d_name); |
601 | (NULL == strstr (ent->d_name, ".dll")) ) | 605 | if ( (dlen < 4) || |
606 | ( (0 != strcmp (&ent->d_name[dlen-3], ".so")) && | ||
607 | (0 != strcasecmp (&ent->d_name[dlen-4], ".dll")) ) ) | ||
602 | continue; /* only load '.so' and '.dll' */ | 608 | continue; /* only load '.so' and '.dll' */ |
603 | if (NULL == (sym_name = strrchr (ent->d_name, '_'))) | 609 | if (NULL == (sym_name = strrchr (ent->d_name, '_'))) |
604 | continue; | 610 | continue; |