Changeset 171 in Sophya for trunk/SophyaPI/PIext/piacmd.cc
- Timestamp:
- Dec 21, 1998, 9:49:55 AM (27 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaPI/PIext/piacmd.cc
r165 r171 2 2 #include <stdlib.h> 3 3 #include <math.h> 4 5 #include <dlfcn.h>6 4 7 5 #include <iostream.h> … … 42 40 else { mObjMgr = new NamedObjMgr; mOmg = true; } 43 41 mImgApp = app; 44 char* varenv;45 TmpDir = "";46 if ( (varenv=getenv("PEIDA_TMP")) != NULL ) TmpDir = varenv;47 else if ( (varenv=getenv("TMPDIR")) != NULL ) TmpDir = varenv;48 int l = TmpDir.length();49 if ( (l>0) && (TmpDir[l-1] != '/') ) TmpDir += '/';50 42 system("cp history.pic hisold.pic"); 51 43 hist.open("history.pic"); 52 44 trace = false; timing = false; 53 45 gltimer = NULL; 54 d lhandle= NULL;46 dynlink = NULL; 55 47 } 56 48 … … 605 597 string& func4, string& func5) 606 598 { 607 string fnamesol = TmpDir + "spiup.so";608 599 string cmd; 609 600 int rc; 610 601 611 if (d lhandle) dlclose(dlhandle); dlhandle= NULL;602 if (dynlink) delete dynlink; dynlink = NULL; 612 603 usfmap.clear(); 613 cmd = "cp " + fnameso + " " + fnamesol; 614 rc = system(cmd.c_str()); 615 if (rc != 0) { cerr << "PIACmd::LinkUserFuncs() Error system(" << cmd << ") Rc= " << rc << endl; return(1); } 616 617 dlhandle = dlopen(fnamesol.c_str(), RTLD_NOW); 618 if (dlhandle == NULL) { 619 string sn = fnamesol; 604 605 dynlink = new PDynLinkMgr(fnameso, true); 606 if (dynlink == NULL) { 607 string sn = fnameso; 620 608 cerr << "PIACmd/LinkUserFuncs_Erreur: Erreur ouverture SO " << sn << endl; 621 609 sn = dlerror(); … … 630 618 if ((func1.length() < 1) || (func1 == "-") || (func1 == ".") ) goto fin; 631 619 // f = (DlUserProcFunction) dlsym(dlhandle, func1.c_str()); 632 f = (DlFunction) dlsym(dlhandle, func1.c_str());620 f = dynlink->GetFunction(func1); 633 621 if (f) { nok++; usfmap[func1] = f; } 634 622 else cerr << "PIACmd/LinkUserFuncs_Erreur: Erreur linking " << func1 << endl; … … 636 624 if ((func2.length() < 1) || (func2 == "-") || (func2 == ".") ) goto fin; 637 625 // f = (DlUserProcFunction) dlsym(dlhandle, func2.c_str()); 638 f = (DlFunction) dlsym(dlhandle, func2.c_str());626 f = dynlink->GetFunction(func2); 639 627 if (f) { nok++; usfmap[func2] = f; } 640 628 else cerr << "PIACmd/LinkUserFuncs_Erreur: Erreur linking " << func2 << endl; … … 642 630 if ((func3.length() < 1) || (func3 == "-") || (func3 == ".") ) goto fin; 643 631 // f = (DlUserProcFunction) dlsym(dlhandle, func3.c_str()); 644 f = (DlFunction) dlsym(dlhandle, func3.c_str());632 f = dynlink->GetFunction(func3); 645 633 if (f) { nok++; usfmap[func3] = f; } 646 634 else cerr << "PIACmd/LinkUserFuncs_Erreur: Erreur linking " << func3 << endl; … … 648 636 if ((func4.length() < 1) || (func4 == "-") || (func4 == ".") ) goto fin; 649 637 // f = (DlUserProcFunction) dlsym(dlhandle, func4.c_str()); 650 f = (DlFunction) dlsym(dlhandle, func4.c_str());638 f = dynlink->GetFunction(func4); 651 639 if (f) { nok++; usfmap[func4] = f; } 652 640 else cerr << "PIACmd/LinkUserFuncs_Erreur: Erreur linking " << func4 << endl; … … 654 642 if ((func5.length() < 1) || (func5 == "-") || (func5 == ".") ) goto fin; 655 643 // f = (DlUserProcFunction) dlsym(dlhandle, func5.c_str()); 656 f = (DlFunction) dlsym(dlhandle, func5.c_str());644 f = dynlink->GetFunction(func5); 657 645 if (f) { nok++; usfmap[func5] = f; } 658 646 else cerr << "PIACmd/LinkUserFuncs_Erreur: Erreur linking " << func5 << endl; 659 647 660 648 fin: 661 if (nok < 1) { dlclose(dlhandle); dlhandle = NULL;return(3); }649 if (nok < 1) { if (dynlink) delete dynlink; dynlink = NULL; return(3); } 662 650 else return(0); 663 651 }
Note:
See TracChangeset
for help on using the changeset viewer.