diff --git a/src/servers/registrar/Jamfile b/src/servers/registrar/Jamfile index 9484a616c7..58dc0a9551 100644 --- a/src/servers/registrar/Jamfile +++ b/src/servers/registrar/Jamfile @@ -38,7 +38,7 @@ local registrar_r5_sources = R5Compatibility.cpp ; -Server obos_registrar +Server haiku_registrar : $(registrar_sources) $(registrar_r5_sources) diff --git a/src/tests/servers/app/bitmap_drawing/run b/src/tests/servers/app/bitmap_drawing/run index b2f4674678..e2dd53a5db 100755 --- a/src/tests/servers/app/bitmap_drawing/run +++ b/src/tests/servers/app/bitmap_drawing/run @@ -1,7 +1,6 @@ #!/bin/sh +../../../../../tests/servers/registrar/run_haiku_registrar || exit ../../../../../distro/x86.R1/beos/system/servers/app_server & sleep 1s -../../../../../distro/x86.R1/beos/system/servers/obos_registrar & -sleep 1s ../../../../../distro/x86.R1/beos/apps/BitmapDrawing diff --git a/src/tests/servers/app/copy_bits/run b/src/tests/servers/app/copy_bits/run index 250609ddf1..092d04a63b 100755 --- a/src/tests/servers/app/copy_bits/run +++ b/src/tests/servers/app/copy_bits/run @@ -1,5 +1,6 @@ #!/bin/sh +../../../../../tests/servers/registrar/run_haiku_registrar || exit ../../../../../distro/x86.R1/beos/system/servers/app_server & sleep 1s ../../../../../tests/servers/app/copy_bits/CopyBits diff --git a/src/tests/servers/app/playground/run b/src/tests/servers/app/playground/run index 493117dded..f57873f44d 100755 --- a/src/tests/servers/app/playground/run +++ b/src/tests/servers/app/playground/run @@ -1,8 +1,6 @@ #!/bin/sh +../../../../../tests/servers/registrar/run_haiku_registrar || exit ../../../../../distro/x86.R1/beos/system/servers/app_server & sleep 1s -../../../../../distro/x86.R1/beos/system/servers/obos_registrar & -sleep 1s -#../../../../../distro/x86.R1/beos/apps/MiniTerminal ../../../../../distro/x86.R1/beos/apps/Playground diff --git a/src/tests/servers/app/resize_limits/run b/src/tests/servers/app/resize_limits/run index af358fa177..8c29438607 100755 --- a/src/tests/servers/app/resize_limits/run +++ b/src/tests/servers/app/resize_limits/run @@ -1,7 +1,6 @@ #!/bin/sh +../../../../../tests/servers/registrar/run_haiku_registrar || exit ../../../../../distro/x86.R1/beos/system/servers/app_server & sleep 1s -../../../../../distro/x86.R1/beos/system/servers/obos_registrar & -sleep 1s ../../../../../distro/x86.R1/beos/apps/ResizeLimits diff --git a/src/tests/servers/app/scrolling/run b/src/tests/servers/app/scrolling/run index 12d62d0c28..8cd8423209 100755 --- a/src/tests/servers/app/scrolling/run +++ b/src/tests/servers/app/scrolling/run @@ -1,5 +1,6 @@ #!/bin/sh +../../../../../tests/servers/registrar/run_haiku_registrar || exit ../../../../../distro/x86.R1/beos/system/servers/app_server & sleep 1s ../../../../../tests/servers/app/scrolling/Scrolling diff --git a/src/tests/servers/app/textview/run b/src/tests/servers/app/textview/run index b8867f43a4..629d94e84f 100755 --- a/src/tests/servers/app/textview/run +++ b/src/tests/servers/app/textview/run @@ -1,7 +1,6 @@ #!/bin/sh +../../../../../tests/servers/registrar/run_haiku_registrar || exit ../../../../../distro/x86.R1/beos/system/servers/app_server & sleep 1s -../../../../../distro/x86.R1/beos/system/servers/obos_registrar & -sleep 1s ../../../../../tests/servers/app/windows/Window diff --git a/src/tests/servers/registrar/Jamfile b/src/tests/servers/registrar/Jamfile index 01f3c9215c..7a431b5f1a 100644 --- a/src/tests/servers/registrar/Jamfile +++ b/src/tests/servers/registrar/Jamfile @@ -27,6 +27,12 @@ CommonUnitTest RosterShell SimpleTest message_deliverer_test : message_deliverer_test.cpp : libopenbeos.so ; + +SimpleTest run_haiku_registrar + : run_haiku_registrar.cpp + : be +; + # a shutdown working with the emulation under R5 if $(TARGET_PLATFORM) = r5 { UsePrivateHeaders app ; diff --git a/src/tests/servers/registrar/run_haiku_registrar.cpp b/src/tests/servers/registrar/run_haiku_registrar.cpp new file mode 100644 index 0000000000..ad376fb9ca --- /dev/null +++ b/src/tests/servers/registrar/run_haiku_registrar.cpp @@ -0,0 +1,95 @@ +/* + * Copyright 2005, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Distributed under the terms of the MIT License. + */ + + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +extern const char* __progname; + + +int +main() +{ + team_info teamInfo; + int32 cookie = 0; + while (get_next_team_info(&cookie, &teamInfo) == B_OK) { + if (!strncmp(teamInfo.args, "/boot/beos/", 11)) { + // this is a system component and not worth to investigate + continue; + } + + thread_info threadInfo; + int32 threadCookie = 0; + while (get_next_thread_info(teamInfo.team, &threadCookie, &threadInfo) == B_OK) { + // search for the roster thread + if (!strcmp(threadInfo.name, "_roster_thread_")) { + port_id port = find_port("_haiku_roster_port_"); + port_info portInfo; + if (get_port_info(port, &portInfo) == B_OK + && portInfo.team == teamInfo.team) { + puts("The Haiku Registrar is already running."); + return 1; + } + } + } + } + + // the Haiku registrar doesn't seem to run yet, change this + + BPath currentPath("."); + + BQuery query; + query.SetPredicate("name==haiku_registrar"); + + // search on current volume only + dev_t device = dev_for_path("."); + BVolume volume(device); + + query.SetVolume(&volume); + query.Fetch(); + + entry_ref ref; + while (query.GetNextRef(&ref) == B_OK) { + BPath path(&ref); + if (path.InitCheck() != B_OK) + continue; + + const char* registrarPath = path.Path(); + const char* distro = strstr(registrarPath, "distro"); + if (distro == NULL) + continue; + + if (!strncmp(currentPath.Path(), registrarPath, distro - 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; + } + } + + 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; +} +