From 80abc6322cdf826575fae60ccd6ce89c9444a55c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Sun, 4 Dec 2011 18:17:20 +0100 Subject: [PATCH] Fall back to running test_registrar from the same directory. As a last fall-back, try to launch the test_registrar from the same directory as run_test_registrar. This makes launching the app_server test environment from a volume without Query support work. --- .../servers/registrar/run_test_registrar.cpp | 50 ++++++++++++------- 1 file changed, 33 insertions(+), 17 deletions(-) diff --git a/src/tests/servers/registrar/run_test_registrar.cpp b/src/tests/servers/registrar/run_test_registrar.cpp index 8c626da2eb..20cf63bcb1 100644 --- a/src/tests/servers/registrar/run_test_registrar.cpp +++ b/src/tests/servers/registrar/run_test_registrar.cpp @@ -4,29 +4,46 @@ */ +#include +#include +#include + #include #include #include #include #include +#include #include #include -#include -#include -#include - extern const char* __progname; +static status_t +launch_registrar(const char* registrarPath) +{ + const char* args[] = { registrarPath, NULL }; + thread_id thread = load_image(1, args, (const char**)environ); + if (thread < B_OK) { + fprintf(stderr, "%s: Could not start the registrar: %s\n", + __progname, strerror(thread)); + return (status_t)thread; + } + + return resume_thread(thread); +} + + int -main() +main(int argc, char* argv[]) { team_info teamInfo; int32 cookie = 0; while (get_next_team_info(&cookie, &teamInfo) == B_OK) { - if (!strncmp(teamInfo.args, "/boot/beos/", 11)) { + if (!strncmp(teamInfo.args, "/boot/beos/", 11) + || !strncmp(teamInfo.args, "/boot/system/", 13)) { // this is a system component and not worth to investigate continue; } @@ -75,23 +92,22 @@ main() if (!strncmp(currentPath.Path(), registrarPath, generatedPath - registrarPath)) { // gotcha! - const char* args[] = { registrarPath, NULL }; - thread_id thread = load_image(1, args, (const char**)environ); - if (thread < B_OK) { - fprintf(stderr, "%s: Could not start the registrar: %s\n", - __progname, strerror(thread)); - return -1; - } - - resume_thread(thread); - return 0; + if (launch_registrar(registrarPath) == B_OK) + return 0; } } + // As a fallback (maybe the volume does not support queries for example) + // try to find the test_registrar in the current folder... + BString registrarPath(argv[0]); + registrarPath.RemoveLast(__progname); + registrarPath.Append("test_registrar"); + if (launch_registrar(registrarPath.String()) == B_OK) + return 0; + fprintf(stderr, "%s: Could not find the Haiku Registrar.\n" " (This tool only works when used in the Haiku tree, but maybe\n" " the registrar just needs to be built.)\n", __progname); return -1; } -