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.
This commit is contained in:
@@ -4,29 +4,46 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include <OS.h>
|
#include <OS.h>
|
||||||
#include <image.h>
|
#include <image.h>
|
||||||
#include <Entry.h>
|
#include <Entry.h>
|
||||||
#include <Query.h>
|
#include <Query.h>
|
||||||
#include <Path.h>
|
#include <Path.h>
|
||||||
|
#include <String.h>
|
||||||
#include <Volume.h>
|
#include <Volume.h>
|
||||||
#include <fs_info.h>
|
#include <fs_info.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
|
|
||||||
extern const char* __progname;
|
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
|
int
|
||||||
main()
|
main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
team_info teamInfo;
|
team_info teamInfo;
|
||||||
int32 cookie = 0;
|
int32 cookie = 0;
|
||||||
while (get_next_team_info(&cookie, &teamInfo) == B_OK) {
|
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
|
// this is a system component and not worth to investigate
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -75,23 +92,22 @@ main()
|
|||||||
|
|
||||||
if (!strncmp(currentPath.Path(), registrarPath, generatedPath - registrarPath)) {
|
if (!strncmp(currentPath.Path(), registrarPath, generatedPath - registrarPath)) {
|
||||||
// gotcha!
|
// gotcha!
|
||||||
const char* args[] = { registrarPath, NULL };
|
if (launch_registrar(registrarPath) == B_OK)
|
||||||
thread_id thread = load_image(1, args, (const char**)environ);
|
return 0;
|
||||||
if (thread < B_OK) {
|
|
||||||
fprintf(stderr, "%s: Could not start the registrar: %s\n",
|
|
||||||
__progname, strerror(thread));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
resume_thread(thread);
|
|
||||||
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"
|
fprintf(stderr, "%s: Could not find the Haiku Registrar.\n"
|
||||||
" (This tool only works when used in the Haiku tree, but maybe\n"
|
" (This tool only works when used in the Haiku tree, but maybe\n"
|
||||||
" the registrar just needs to be built.)\n",
|
" the registrar just needs to be built.)\n",
|
||||||
__progname);
|
__progname);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user