summaryrefslogtreecommitdiff
path: root/extensions
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2011-10-21 11:21:53 +0200
committerStephan Bergmann <sbergman@redhat.com>2011-10-24 13:59:53 +0200
commit6351fab9c8ae6233590eabbd806d1083a0cde3b2 (patch)
tree2e9f67c528f34141710476459088b60ba997dc65 /extensions
parentf17c10545fabefd027b278798840706f2dbf4a04 (diff)
Undo basis/brand split: moved nsplugin from basis to brand.
Diffstat (limited to 'extensions')
-rw-r--r--extensions/source/nsplugin/source/npshell.cxx106
1 files changed, 48 insertions, 58 deletions
diff --git a/extensions/source/nsplugin/source/npshell.cxx b/extensions/source/nsplugin/source/npshell.cxx
index a20830a21350..91ab12e6f2c2 100644
--- a/extensions/source/nsplugin/source/npshell.cxx
+++ b/extensions/source/nsplugin/source/npshell.cxx
@@ -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) {
- 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)) {
+ if (!extendEnvironment(&env)) {
return NPERR_GENERIC_ERROR;
}
- pathEnd = tools::buildPath(
- path, path, pathEnd, MY_STRING(L"\\program"));
- if (pathEnd == NULL) {
+ WCHAR path[MAX_PATH];
+ 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);