1*a06f7ccaSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*a06f7ccaSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*a06f7ccaSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*a06f7ccaSAndrew Rist * distributed with this work for additional information
6*a06f7ccaSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*a06f7ccaSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*a06f7ccaSAndrew Rist * "License"); you may not use this file except in compliance
9*a06f7ccaSAndrew Rist * with the License. You may obtain a copy of the License at
10*a06f7ccaSAndrew Rist *
11*a06f7ccaSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*a06f7ccaSAndrew Rist *
13*a06f7ccaSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*a06f7ccaSAndrew Rist * software distributed under the License is distributed on an
15*a06f7ccaSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*a06f7ccaSAndrew Rist * KIND, either express or implied. See the License for the
17*a06f7ccaSAndrew Rist * specific language governing permissions and limitations
18*a06f7ccaSAndrew Rist * under the License.
19*a06f7ccaSAndrew Rist *
20*a06f7ccaSAndrew Rist *************************************************************/
21*a06f7ccaSAndrew Rist
22*a06f7ccaSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #include <rtl/string.h>
25cdf0e10cSrcweir
26cdf0e10cSrcweir #include <stdlib.h>
27cdf0e10cSrcweir #include <string.h>
28cdf0e10cSrcweir
29cdf0e10cSrcweir #ifdef LINUX
30cdf0e10cSrcweir # ifndef __USE_GNU
31cdf0e10cSrcweir # define __USE_GNU
32cdf0e10cSrcweir # endif
33cdf0e10cSrcweir #endif
34cdf0e10cSrcweir #include <dlfcn.h>
35cdf0e10cSrcweir
initpyuno()36cdf0e10cSrcweir void initpyuno ()
37cdf0e10cSrcweir {
38cdf0e10cSrcweir Dl_info dl_info;
39cdf0e10cSrcweir void (*func)(void);
40cdf0e10cSrcweir
41cdf0e10cSrcweir if (dladdr((void*)&initpyuno, &dl_info) != 0) {
42cdf0e10cSrcweir void* h = 0;
43cdf0e10cSrcweir size_t len = strrchr(dl_info.dli_fname, '/') - dl_info.dli_fname + 1;
44cdf0e10cSrcweir char* libname = malloc(len + RTL_CONSTASCII_LENGTH( SAL_DLLPREFIX "pyuno" SAL_DLLEXTENSION ) + 1);
45cdf0e10cSrcweir strncpy(libname, dl_info.dli_fname, len);
46cdf0e10cSrcweir strcpy(libname + (len), SAL_DLLPREFIX "pyuno" SAL_DLLEXTENSION);
47cdf0e10cSrcweir
48cdf0e10cSrcweir h = dlopen (libname, RTLD_NOW | RTLD_GLOBAL);
49cdf0e10cSrcweir free(libname);
50cdf0e10cSrcweir if( h )
51cdf0e10cSrcweir {
52cdf0e10cSrcweir func = (void (*)())dlsym (h, "initpyuno");
53cdf0e10cSrcweir (func) ();
54cdf0e10cSrcweir }
55cdf0e10cSrcweir }
56cdf0e10cSrcweir }
57