Undo basis/brand split: moved nsplugin from basis to brand.

This commit is contained in:
Stephan Bergmann 2011-10-21 11:21:53 +02:00
parent f17c10545f
commit 6351fab9c8
2 changed files with 49 additions and 59 deletions

View file

@ -138,22 +138,31 @@ static pid_t nChildPID = 0;
#if defined WNT
namespace {
bool extendEnvironment(
boost::scoped_array< WCHAR > * environment, WCHAR const * pathBegin,
WCHAR const * pathEnd)
{
WCHAR ure[MAX_PATH];
if (tools::buildPath(ure, pathBegin, pathEnd, MY_STRING(L"\\ure-link")) ==
NULL)
bool extendEnvironment(boost::scoped_array< WCHAR > * environment) {
WCHAR path[MAX_PATH];
int len = MultiByteToWideChar(
CP_ACP, MB_PRECOMPOSED, findInstallDir(), -1, brand, MAX_PATH);
//TODO: conversion errors
if (len == 0 ||
(tools::buildPath(
path, pathBegin, path + len - 1, MY_STRING(L"\\basis-link"))
== NULL))
{
return false;
}
WCHAR * ureEnd = tools::resolveLink(ure);
if (ureEnd == NULL) {
WCHAR * pathEnd = tools::resolveLink(path);
if (pathEnd == NULL ||
(tools::buildPath(path, pathBegin, pathEnd, MY_STRING(L"\\ure-link")) ==
NULL))
{
return false;
}
ureEnd = tools::buildPath(ure, ure, ureEnd, MY_STRING(L"\\bin"));
if (ureEnd == NULL) {
pathEnd = tools::resolveLink(path);
if (pathEnd == NULL) {
return false;
}
pathEnd = tools::buildPath(path, path, pathEnd, MY_STRING(L"\\bin"));
if (pathEnd == NULL) {
return false;
}
WCHAR const * env = GetEnvironmentStringsW();
@ -171,34 +180,34 @@ bool extendEnvironment(
(p[3] == L'H' || p[3] == L'h') && p[4] == L'=')
{
p1 = p + MY_LENGTH(L"PATH=");
//TODO: check whether the ure path is already present in PATH (at
// the beginning of PATH?)
//TODO: check whether the path is already present in PATH (at the
// beginning of PATH?)
}
p += n + 1;
}
++p;
if (p1 == NULL) {
environment->reset(
new WCHAR[MY_LENGTH(L"PATH=") + (ureEnd - ure) + 1 + (p - env)]);
new WCHAR[MY_LENGTH(L"PATH=") + (pathEnd - path) + 1 + (p - env)]);
//TODO: overflow
memcpy(environment->get(), MY_STRING(L"PATH=") * sizeof (WCHAR));
memcpy(
environment->get() + MY_LENGTH(L"PATH="), ure,
((ureEnd - ure) + 1) * sizeof (WCHAR));
environment->get() + MY_LENGTH(L"PATH="), path,
((pathEnd - path) + 1) * sizeof (WCHAR));
memcpy(
environment->get() + MY_LENGTH(L"PATH=") + (ureEnd - ure) + 1, env,
(p - env) * sizeof (WCHAR));
environment->get() + MY_LENGTH(L"PATH=") + (pathEnd - path) + 1,
env, (p - env) * sizeof (WCHAR));
} else {
environment->reset(
new WCHAR[(p - env) + (ureEnd - ure) + MY_LENGTH(L";")]);
new WCHAR[(p - env) + (pathEnd - path) + MY_LENGTH(L";")]);
//TODO: overflow
memcpy(environment->get(), env, (p1 - env) * sizeof (WCHAR));
memcpy(
environment->get() + (p1 - env), ure,
(ureEnd - ure) * sizeof (WCHAR));
environment->get()[(p1 - env) + (ureEnd - ure)] = L';';
environment->get() + (p1 - env), path,
(pathEnd - path) * sizeof (WCHAR));
environment->get()[(p1 - env) + (pathEnd - path)] = L';';
memcpy(
environment->get() + (p1 - env) + (ureEnd - ure) + 1, p1,
environment->get() + (p1 - env) + (pathEnd - path) + 1, p1,
(p - p1) * sizeof (WCHAR));
}
return true;
@ -229,13 +238,10 @@ int do_init_pipe()
char s_write_fd[16] = {0};
sprintf(s_read_fd, "%d", fd[0]);
sprintf(s_write_fd, "%d", fd[1]);
char const * instdir = findInstallDir();
boost::scoped_array< char > exepath(
new char[strlen(instdir) +
RTL_CONSTASCII_LENGTH("/basis-link/program/nsplugin") +
1]);
sprintf(exepath.get(), "%s/basis-link/program/nsplugin", instdir);
char const * progdir = findProgramDir();
boost::scoped_array< char > exepath(
new char[strlen(progdir) + RTL_CONSTASCII_LENGTH("/nsplugin") + 1]);
sprintf(exepath.get(), "%s/nsplugin", progdir);
boost::scoped_array< char > inifilepath(
new char[
RTL_CONSTASCII_LENGTH(
@ -255,43 +261,27 @@ int do_init_pipe()
WCHAR s_write_fd[16] = {0};
wsprintfW(s_read_fd, L"%d", fd[0]);
wsprintfW(s_write_fd, L"%d", fd[1]);
WCHAR brand[MAX_PATH];
int brandLen = MultiByteToWideChar(
CP_ACP, MB_PRECOMPOSED, findInstallDir(), -1, brand, MAX_PATH);
//TODO: conversion errors
if (brandLen == 0) {
boost::scoped_array< WCHAR > env;
if (!extendEnvironment(&env)) {
return NPERR_GENERIC_ERROR;
}
WCHAR path[MAX_PATH];
if (tools::buildPath(
path, brand, brand + brandLen - 1, MY_STRING(L"\\basis-link"))
== NULL)
{
return NPERR_GENERIC_ERROR;
}
WCHAR * pathEnd = tools::resolveLink(path);
if (pathEnd == NULL) {
return NPERR_GENERIC_ERROR;
}
boost::scoped_array< WCHAR > env;
if (!extendEnvironment(&env, path, pathEnd)) {
return NPERR_GENERIC_ERROR;
}
pathEnd = tools::buildPath(
path, path, pathEnd, MY_STRING(L"\\program"));
if (pathEnd == NULL) {
int pathLen = MultiByteToWideChar(
CP_ACP, MB_PRECOMPOSED, findProgramDir(), -1, brand, MAX_PATH);
//TODO: conversion errors
if (pathLen == 0) {
return NPERR_GENERIC_ERROR;
}
WCHAR exe[MAX_PATH];
WCHAR * exeEnd = tools::buildPath(
exe, path, pathEnd, MY_STRING(L"\\nsplugin.exe"));
exe, path, path + pathLen - 1, MY_STRING(L"\\nsplugin.exe"));
if (exeEnd == NULL) {
return NPERR_GENERIC_ERROR;
}
WCHAR * brandEnd = tools::buildPath(
brand, brand, brand + brandLen - 1,
MY_STRING(L"\\program\\redirect.ini"));
if (brandEnd == NULL) {
WCHAR ini[MAX_PATH];
WCHAR * iniEnd = tools::buildPath(
ini, path, path + pathLen - 1, MY_STRING(L"\\redirect.ini"));
if (iniEnd == NULL) {
return NPERR_GENERIC_ERROR;
}
boost::scoped_array< WCHAR > args(
@ -299,11 +289,11 @@ int do_init_pipe()
MY_LENGTH(L"\"") + (exeEnd - exe) + MY_LENGTH(L"\" ") +
wcslen(s_read_fd) + MY_LENGTH(L" ") + wcslen(s_write_fd) +
MY_LENGTH(L" \"-env:INIFILENAME=vnd.sun.star.pathname:") +
(brandEnd - brand) + MY_LENGTH(L"\"") + 1]); //TODO: overflow
(iniEnd - ini) + MY_LENGTH(L"\"") + 1]); //TODO: overflow
wsprintfW(
args.get(),
L"\"%s\" %s %s \"-env:INIFILENAME=vnd.sun.star.pathname:%s\"", exe,
s_read_fd, s_write_fd, brand);
s_read_fd, s_write_fd, ini);
STARTUPINFOW NSP_StarInfo;
memset((void*) &NSP_StarInfo, 0, sizeof(STARTUPINFOW));
NSP_StarInfo.cb = sizeof(STARTUPINFOW);

View file

@ -114,7 +114,7 @@ End
File gid_File_Exe_Nsplugin
BIN_FILE_BODY;
Styles = (PACKED);
Dir = gid_Dir_Program;
Dir = gid_Brand_Dir_Program;
#ifdef UNX
Name = "nsplugin";
#else