source: git/ppcc/Singular/stitch.patch @ 1edbe2f

fieker-DuValspielwiese
Last change on this file since 1edbe2f was 1edbe2f, checked in by Hans Schoenemann <hannes@…>, 5 years ago
format
  • Property mode set to 100644
File size: 5.4 KB
  • Singular/blackbox.cc

    diff --git a/Singular/blackbox.cc b/Singular/blackbox.cc
    index bf4cc32f2..15e9fcb12 100644
    a b  
    99#define MAX_BB_TYPES 256
    1010// #define BLACKBOX_DEVEL 1
    1111
    12 static blackbox* blackboxTable[MAX_BB_TYPES];
    13 static char *    blackboxName[MAX_BB_TYPES];
    14 static int blackboxTableCnt=0;
     12GLOBAL_VAR static blackbox* blackboxTable[MAX_BB_TYPES];
     13GLOBAL_VAR static char *    blackboxName[MAX_BB_TYPES];
     14GLOBAL_VAR static int blackboxTableCnt=0;
    1515#define BLACKBOX_OFFSET (MAX_TOK+1)
    1616blackbox* getBlackboxStuff(const int t)
    1717{
    BOOLEAN blackbox_default_Check(blackbox *,leftv,leftv) 
    125125}
    126126int setBlackboxStuff(blackbox *bb, const char *n)
    127127{
    128   int where=-1;
    129   if (MAX_BB_TYPES<=blackboxTableCnt)
     128  int where = -1;
     129  for (int i=0;i<MAX_BB_TYPES;i++)
    130130  {
    131     // second try, find empty slot from removed bb:
    132     for (int i=0;i<MAX_BB_TYPES;i++)
    133     {
    134       if (blackboxTable[i]==NULL) { where=i; break; }
     131    if (blackboxTable[i]!=NULL && strcmp(blackboxName[i],n)==0) {
     132      where = i;
     133      break;
    135134    }
    136135  }
    137   else
    138   {
    139     where=blackboxTableCnt;
    140     blackboxTableCnt++;
     136  if (where < 0) {
     137    if (MAX_BB_TYPES<=blackboxTableCnt)
     138    {
     139      // second try, find empty slot from removed bb:
     140      for (int i=0;i<MAX_BB_TYPES;i++)
     141      {
     142        if (blackboxTable[i]==NULL) { where=i; break; }
     143      }
     144    }
     145    else
     146    {
     147      where=blackboxTableCnt;
     148      blackboxTableCnt++;
     149    }
    141150  }
    142151  if (where==-1)
    143152  {
  • Singular/iplib.cc

    diff --git a/Singular/iplib.cc b/Singular/iplib.cc
    index 130bc1104..0f0f98e97 100644
    a b void yylprestart (FILE *input_file ); 
    5959int current_pos(int i=0);
    6060extern int yylp_errno;
    6161extern int yylplineno;
    62 extern char *yylp_errlist[];
     62extern const char *yylp_errlist[];
    6363void print_init();
    6464libstackv library_stack;
    6565#endif
    int iiAddCprocTop(const char *libname, const char *procname, BOOLEAN pstatic, 
    10871087
    10881088/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
    10891089#ifdef HAVE_DYNAMIC_LOADING
    1090 BOOLEAN load_modules(const char *newlib, char *fullname, BOOLEAN autoexport)
     1090#include <map>
     1091#include <string>
     1092#include <pthread.h>
     1093
     1094STATIC_VAR std::map<std::string, void *> *dyn_modules;
     1095
     1096bool registered_dyn_module(char *fullname) {
     1097  if (dyn_modules == NULL)
     1098    return false;
     1099  std::string fname = fullname;
     1100  return !(dyn_modules->count(fname));
     1101}
     1102
     1103void register_dyn_module(char *fullname, void * handle) {
     1104  std::string fname = fullname;
     1105  if (dyn_modules == NULL)
     1106    dyn_modules = new std::map<std::string, void *>();
     1107  dyn_modules->insert(std::pair<std::string, void *>(fname, handle));
     1108}
     1109
     1110void close_all_dyn_modules() {
     1111  for (std::map<std::string, void *>::iterator it = dyn_modules->begin();
     1112       it != dyn_modules->end();
     1113       it++)
     1114  {
     1115    dynl_close(it->second);
     1116  }
     1117  delete dyn_modules;
     1118  dyn_modules = NULL;
     1119}
     1120BOOLEAN load_modules_aux(const char *newlib, char *fullname, BOOLEAN autoexport)
    10911121{
    10921122#ifdef HAVE_STATIC
    10931123  WerrorS("mod_init: static version can not load modules");
    BOOLEAN load_modules(const char *newlib, char *fullname, BOOLEAN autoexport) 
    11421172    IDPACKAGE(pl)->libname=omStrDup(newlib);
    11431173  }
    11441174  IDPACKAGE(pl)->language = LANG_C;
    1145   if (dynl_check_opened(FullName))
     1175  if (registered_dyn_module(FullName))
    11461176  {
    11471177    if (BVERBOSE(V_LOAD_LIB)) Warn( "%s already loaded as C library", fullname);
    11481178    return FALSE;
    BOOLEAN load_modules(const char *newlib, char *fullname, BOOLEAN autoexport) 
    11771207      }
    11781208      currPack->loaded=1;
    11791209      currPack=s; /* reset currPack to previous */
     1210      register_dyn_module(fullname, IDPACKAGE(pl)->handle);
    11801211      RET=FALSE;
    11811212    }
    11821213    else
    BOOLEAN load_modules(const char *newlib, char *fullname, BOOLEAN autoexport) 
    11921223  return RET;
    11931224#endif /*STATIC */
    11941225}
     1226
     1227BOOLEAN load_modules(const char *newlib, char *fullname, BOOLEAN autoexport) {
     1228  GLOBAL_VAR static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
     1229  pthread_mutex_lock(&mutex);
     1230  BOOLEAN r = load_modules_aux(newlib, fullname, autoexport);
     1231  pthread_mutex_unlock(&mutex);
     1232  return r;
     1233}
    11951234#endif /* HAVE_DYNAMIC_LOADING */
    11961235/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
    11971236BOOLEAN load_builtin(const char *newlib, BOOLEAN autoexport, SModulFunc_t init)
  • Singular/tesths.cc

    diff --git a/Singular/tesths.cc b/Singular/tesths.cc
    index a4344e18f..8294da86d 100644
    a b  
    3636
    3737
    3838extern int siInit(char *);
     39#ifdef PSINGULAR
     40GLOBAL_VAR char *global_argv0;
     41#endif
    3942
    4043int mmInit( void )
    4144{
    int main( /* main entry to Singular */ 
    6265  omInitRet_2_Info(argv[0]);
    6366  omInitGetBackTrace();
    6467
     68#ifdef PSINGULAR
     69  global_argv0 = argv[0];
     70#endif
    6571  siInit(argv[0]);
    6672  init_signals();
    6773  #ifdef HAVE_NTL
  • libpolys/polys/mod_raw.cc

    diff --git a/libpolys/polys/mod_raw.cc b/libpolys/polys/mod_raw.cc
    index 5ea09fa3c..183aab6e5 100644
    a b void *dynl_open( 
    146146  char *filename    /* I: filename to load */
    147147  )
    148148{
     149  return dlopen(filename, RTLD_NOW|RTLD_GLOBAL);
     150#if 0
    149151// glibc 2.2:
    150152  if ((filename==NULL) || (dlopen(filename,RTLD_NOW|RTLD_NOLOAD)==NULL))
    151153    return(dlopen(filename, RTLD_NOW|RTLD_GLOBAL));
    void *dynl_open( 
    154156  return NULL;
    155157// alternative
    156158//    return(dlopen(filename, RTLD_NOW|RTLD_GLOBAL));
     159#endif
    157160}
    158161
    159162void *dynl_sym(void *handle, const char *symbol)
Note: See TracBrowser for help on using the repository browser.