32#include <rtl/string.h>
64int main(
int argc,
char *argv[] )
77 static const char* ENVVARNAME =
"DYLD_LIBRARY_PATH";
79 static const char* ENVVARNAME =
"LD_LIBRARY_PATH";
86 size_t pathlen = strlen(path);
90 static char const unoinfoSuffix[] =
"/unoinfo";
91 char * unoinfo = malloc(
92 pathlen + RTL_CONSTASCII_LENGTH(unoinfoSuffix) + 1);
94 if (unoinfo ==
NULL) {
96 fprintf(stderr,
"Error: out of memory!\n");
99 strcpy(unoinfo, path);
102 unoinfoSuffix + (pathlen == 0 || path[pathlen - 1] !=
'/' ? 0 : 1));
103 ret = lstat(unoinfo, &stats);
108 2 * pathlen + RTL_CONSTASCII_LENGTH(
"/unoinfo c++") + 1);
116 fprintf(stderr,
"Error: out of memory!\n");
125 if (
p == path ||
p[-1] !=
'/') {
128 strcpy(q,
"unoinfo c++");
133 fprintf(stderr,
"Error: calling unoinfo failed!\n");
139 libpath = realloc(libpath,
n);
140 if (libpath ==
NULL) {
143 "Error: out of memory reading unoinfo output!\n");
146 m = fread(libpath + old, 1,
n - old - 1, f);
147 if (
m !=
n - old - 1) {
149 fprintf(stderr,
"Error: cannot read unoinfo output!\n");
152 libpath[old +
m] =
'\0';
155 if (
n >= SAL_MAX_SIZE / 2) {
158 "Error: out of memory reading unoinfo output!\n");
164 if (pclose(f) != 0) {
165 fprintf(stderr,
"Error: executing unoinfo failed!\n");
176 value = getenv( ENVVARNAME );
181 size = strlen( ENVVARNAME ) + strlen(
"=/usr/lib:" ) + strlen( libpath ) + 1;
183 size = strlen( ENVVARNAME ) + strlen(
"=" ) + strlen( libpath ) + 1;
187 envstr = (
char*) malloc(
size );
188 strcpy( envstr, ENVVARNAME );
190 strcat( envstr,
"=/usr/lib:" );
192 strcat( envstr,
"=" );
194 strcat( envstr, libpath );
199 strcat( envstr,
value );
206 fprintf( stderr,
"Warning: no office installation found!\n" );
219 execvp( cmdname, argv );
220 fprintf( stderr,
"Error: execvp failed!\n" );
239 fprintf( stderr,
"Warning: getting path from PATH environment "
240 "variable failed!\n" );
259 const char* CMDPREFIX =
"_";
260 const char* prgname =
NULL;
262 char* cmdname =
NULL;
276 dl_info.dli_fname !=
NULL && *dl_info.dli_fname ==
SEPARATOR )
278 prgname = dl_info.dli_fname;
282 if ( prgname !=
NULL )
284 cmdname = (
char*) malloc( strlen( prgname ) + strlen( CMDPREFIX ) + 1 );
288 int pos = ++sep - prgname;
289 strncpy( cmdname, prgname,
pos );
290 cmdname[
pos ] =
'\0';
291 strcat( cmdname, CMDPREFIX );
292 strcat( cmdname, sep );
296 strcpy( cmdname, CMDPREFIX );
297 strcat( cmdname, prgname );
char * cppuhelper_detail_findSofficePath(void)
int main(int argc, char *argv[])
static char * getPath(void)
static char * createCommandName(char *argv0)
static const int SEPARATOR
static const char * PATHSEPARATOR