| 1188 | dyn_modules = NULL; |
| 1189 | } |
| 1190 | BOOLEAN load_modules_aux(const char *newlib, char *fullname, BOOLEAN autoexport) |
| 1191 | { |
| 1192 | /* |
| 1193 | typedef int (*fktn_t)(int(*iiAddCproc)(const char *libname, const char *procname, |
| 1194 | BOOLEAN pstatic, |
| 1195 | BOOLEAN(*func)(leftv res, leftv v))); |
| 1196 | */ |
| 1197 | SModulFunc_t fktn; |
| 1198 | idhdl pl; |
| 1199 | char *plib = iiConvName(newlib); |
| 1200 | BOOLEAN RET=TRUE; |
| 1201 | int token; |
| 1202 | int l=si_max((int)strlen(fullname),(int)strlen(newlib))+3; |
| 1203 | char *FullName=(char*)omAlloc0(l); |
| 1204 | |
| 1205 | if( *fullname != '/' && *fullname != '.' ) |
| 1206 | snprintf(FullName,l, "./%s", newlib); |
| 1207 | else strncpy(FullName, fullname,l); |
| 1208 | |
| 1209 | |
| 1210 | if(IsCmd(plib, token)) |
| 1211 | { |
| 1212 | Werror("'%s' is resered identifier\n", plib); |
| 1213 | goto load_modules_end; |
| 1214 | } |
| 1215 | pl = basePack->idroot->get(plib,0); /* packages only in top level |
| 1216 | (see enterid) */ |
| 1217 | if ((pl!=NULL) |
| 1218 | &&(IDTYP(pl)==PACKAGE_CMD)) |
| 1219 | { |
| 1220 | if(IDPACKAGE(pl)->language==LANG_C) |
| 1221 | { |
| 1222 | if (BVERBOSE(V_LOAD_LIB)) Warn( "%s already loaded as package", newlib); |
| 1223 | omFreeBinAddr(plib); |
| 1224 | return FALSE; |
| 1225 | } |
| 1226 | else if(IDPACKAGE(pl)->language==LANG_MIX) |
| 1227 | { |
| 1228 | if (BVERBOSE(V_LOAD_LIB)) Warn( "%s contain binary parts, cannot load", newlib); |
| 1229 | omFreeBinAddr(plib); |
| 1230 | return FALSE; |
| 1231 | } |
| 1232 | } |
| 1233 | else |
| 1234 | { |
| 1235 | pl = enterid( plib,0, PACKAGE_CMD, &IDROOT, TRUE ); |
| 1236 | omFreeBinAddr(plib); /* enterid copied plib*/ |
| 1237 | IDPACKAGE(pl)->libname=omStrDup(newlib); |
| 1238 | } |
| 1239 | IDPACKAGE(pl)->language = LANG_C; |
| 1240 | if (dynl_check_opened(FullName)) |
| 1241 | { |
| 1242 | if (BVERBOSE(V_LOAD_LIB)) Warn( "%s already loaded as C library", fullname); |
| 1243 | omFreeSize(FullName,l); |
| 1244 | return FALSE; |
| 1245 | } |
| 1246 | if((IDPACKAGE(pl)->handle=dynl_open(FullName))==(void *)NULL) |
| 1247 | { |
no test coverage detected