MCPcopy Create free account
hub / github.com/Singular/Singular / load_modules_aux

Function load_modules_aux

Singular/iplib.cc:1190–1291  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1188 dyn_modules = NULL;
1189}
1190BOOLEAN 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 {

Callers 1

load_modulesFunction · 0.85

Calls 15

iiConvNameFunction · 0.85
si_maxFunction · 0.85
omAlloc0Function · 0.85
IsCmdFunction · 0.85
WerrorFunction · 0.85
WarnFunction · 0.85
enteridFunction · 0.85
dynl_check_openedFunction · 0.85
dynl_openFunction · 0.85
dynl_errorFunction · 0.85
killhdl2Function · 0.85
dynl_symFunction · 0.85

Tested by

no test coverage detected