@@ -44,6 +44,7 @@ extern "C"
4444#include "openmodelica.h"
4545#include "meta_modelica.h"
4646#include "rml_compatibility.h"
47+ #include "ModelicaUtilities.h"
4748#define ADD_METARECORD_DEFINTIONS static
4849#include "OpenModelicaBootstrappingHeader.h"
4950#include "systemimpl.c"
@@ -93,7 +94,7 @@ extern const char* System_stringFindString(const char* str, const char* searchSt
9394 const char * found = strstr (str , searchStr );
9495 if (found == NULL )
9596 MMC_THROW ();
96- return strdup ( found );
97+ return strcpy ( ModelicaAllocateString ( strlen ( found )), found );
9798}
9899
99100extern void System_realtimeTick (int ix )
@@ -127,27 +128,27 @@ extern const char* System_getRTLibs()
127128
128129extern const char * System_getCCompiler ()
129130{
130- return strdup ( cc );
131+ return strcpy ( ModelicaAllocateString ( strlen ( cc )), cc );
131132}
132133
133134extern const char * System_getCXXCompiler ()
134135{
135- return strdup ( cxx );
136+ return strcpy ( ModelicaAllocateString ( strlen ( cxx )), cxx );
136137}
137138
138139extern const char * System_getLinker ()
139140{
140- return strdup ( linker );
141+ return strcpy ( ModelicaAllocateString ( strlen ( linker )), linker );
141142}
142143
143144extern const char * System_getLDFlags ()
144145{
145- return strdup ( ldflags );
146+ return strcpy ( ModelicaAllocateString ( strlen ( ldflags )), ldflags );
146147}
147148
148149extern const char * System_getCFlags ()
149150{
150- return strdup ( cflags );
151+ return strcpy ( ModelicaAllocateString ( strlen ( cflags )), cflags );
151152}
152153
153154extern const char * System_getExeExt ()
@@ -184,7 +185,8 @@ extern const char* System_trimChar(const char* str, const char* char_to_remove)
184185
185186extern const char * System_basename (const char * str )
186187{
187- return strdup (SystemImpl__basename (str ));
188+ char * res = SystemImpl__basename (str );
189+ return strcpy (ModelicaAllocateString (strlen (res )), res );
188190}
189191
190192extern const char * System_dirname (const char * str )
@@ -195,10 +197,11 @@ extern const char* System_dirname(const char* str)
195197 char drive [_MAX_DRIVE ], dir [_MAX_DIR ], filename [_MAX_FNAME ], extension [_MAX_EXT ];
196198 _splitpath (str , drive , dir , filename , extension );
197199 sprintf (cpy , "%s/%s/" ,drive ,dir );
198- res = strdup ( cpy ) ;
200+ res = cpy ;
199201#else
200- res = strdup ( dirname (cpy ) );
202+ res = dirname (cpy );
201203#endif
204+ res = strcpy (ModelicaAllocateString (strlen (res )), res );
202205 free (cpy );
203206 return res ;
204207}
@@ -347,7 +350,7 @@ extern char* System_substring(const char *str, int start, int stop)
347350extern char * System_toupper (const char * str )
348351{
349352 int i ;
350- char * strToUpper = strdup ( str );
353+ char * strToUpper = strcpy ( ModelicaAllocateString ( strlen ( str )), str );
351354 for (i = 0 ; i < strlen (strToUpper ); i ++ )
352355 {
353356 strToUpper [i ] = toupper (strToUpper [i ]);
@@ -358,7 +361,7 @@ extern char* System_toupper(const char *str)
358361extern char * System_tolower (const char * str )
359362{
360363 int i ;
361- char * strToLower = strdup ( str );
364+ char * strToLower = strcpy ( ModelicaAllocateString ( strlen ( str )), str );
362365 for (i = 0 ; i < strlen (strToLower ); i ++ )
363366 {
364367 strToLower [i ] = tolower (strToLower [i ]);
@@ -369,7 +372,7 @@ extern char* System_tolower(const char *str)
369372const char * System_getClassnamesForSimulation ()
370373{
371374 if (class_names_for_simulation )
372- return strdup ( class_names_for_simulation );
375+ return strcpy ( ModelicaAllocateString ( strlen ( class_names_for_simulation )), class_names_for_simulation );
373376 else
374377 return "{}" ;
375378}
@@ -469,7 +472,7 @@ extern const char* System_readEnv(const char *envname)
469472{
470473 char * envvalue = getenv (envname );
471474 if (envvalue == NULL ) MMC_THROW ();
472- return strdup ( envvalue );
475+ return strcpy ( ModelicaAllocateString ( strlen ( envvalue )), envvalue );
473476}
474477
475478extern void System_getCurrentDateTime (int * sec , int * min , int * hour , int * mday , int * mon , int * year )
@@ -488,7 +491,8 @@ extern void System_getCurrentDateTime(int* sec, int* min, int* hour, int* mday,
488491
489492extern const char * System_getUUIDStr ()
490493{
491- return strdup (SystemImpl__getUUIDStr ());
494+ char * res = SystemImpl__getUUIDStr ();
495+ return strcpy (ModelicaAllocateString (strlen (res )),res );
492496}
493497
494498extern int System_loadLibrary (const char * name , int printDebug )
@@ -672,7 +676,9 @@ extern void System_getLoadModelPath(const char *className, void *prios, void *mp
672676{
673677 * name = NULL ;
674678 if (SystemImpl__getLoadModelPath (className ,prios ,mps ,dir ,name ,isDir )) MMC_THROW ();
675- /* TODO: Do not strdup in parent... */
679+ char * res = strcpy (ModelicaAllocateString (strlen (name )),name );
680+ free (* name );
681+ * name = res ;
676682}
677683
678684extern const char * System_getMakeCommand ()
0 commit comments