diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html index 025070128..b80fa9bee 100644 --- a/documentation/RELEASE_NOTES.html +++ b/documentation/RELEASE_NOTES.html @@ -9,7 +9,7 @@
-

EPICS Release base 3.14.2

+

EPICS Release base 3.14.3

May 21 2003

@@ -18,6 +18,9 @@

Changes since 3.14.2

+

epicsStrDup

+

Operating-system independent replacement for strdup().

+

epicsMessageQueue

The epicsMessageQueue API has been changed. All functions and methods to diff --git a/src/dbStatic/dbLexRoutines.c b/src/dbStatic/dbLexRoutines.c index 7aed8d38c..5f803685e 100644 --- a/src/dbStatic/dbLexRoutines.c +++ b/src/dbStatic/dbLexRoutines.c @@ -99,14 +99,6 @@ static ELLLIST tempList; static void *freeListPvt = NULL; static int duplicate = FALSE; -static char *strduplicate(const char * str) -{ - char *tstr; - tstr = dbCalloc(strlen(str) + 1,sizeof(char)); - strcpy(tstr,str); - return(tstr); -} - static void yyerrorAbort(char *str) { yyerror(str); @@ -229,7 +221,7 @@ static long dbReadCOM(DBBASE **ppdbbase,const char *filename, FILE *fp, freeListInitPvt(&freeListPvt,sizeof(tempListNode),100); pinputFile = dbCalloc(1,sizeof(inputFile)); if(filename) { - pinputFile->filename = strduplicate(filename); + pinputFile->filename = epicsStrDup(filename); } if(!fp) { FILE *fp; @@ -389,7 +381,7 @@ static void dbIncludeNew(char *filename) free((void *)pinputFile); return; } - pinputFile->filename = strduplicate(filename); + pinputFile->filename = epicsStrDup(filename); pinputFile->fp = fp; ellAdd(&inputFileList,&pinputFile->node); pinputFileNow = pinputFile; @@ -407,15 +399,15 @@ static void dbMenuHead(char *name) } if(ellCount(&tempList)) yyerrorAbort("dbMenuHead: tempList not empty"); pdbMenu = dbCalloc(1,sizeof(dbMenu)); - pdbMenu->name = strduplicate(name); + pdbMenu->name = epicsStrDup(name); allocTemp(pdbMenu); } static void dbMenuChoice(char *name,char *value) { if(duplicate) return; - allocTemp(strduplicate(name)); - allocTemp(strduplicate(value)); + allocTemp(epicsStrDup(name)); + allocTemp(epicsStrDup(value)); } static void dbMenuBody(void) @@ -466,7 +458,7 @@ static void dbRecordtypeHead(char *name) return; } pdbRecordType = dbCalloc(1,sizeof(dbRecordType)); - pdbRecordType->name = strduplicate(name); + pdbRecordType->name = epicsStrDup(name); if (pdbbase->loadCdefs) ellInit(&pdbRecordType->cdefList); if(ellCount(&tempList)) yyerrorAbort("dbRecordtypeHead tempList not empty"); @@ -481,7 +473,7 @@ static void dbRecordtypeFieldHead(char *name,char *type) if(duplicate) return; pdbFldDes = dbCalloc(1,sizeof(dbFldDes)); allocTemp(pdbFldDes); - pdbFldDes->name = strduplicate(name); + pdbFldDes->name = epicsStrDup(name); pdbFldDes->as_level = ASL1; for(i=0; iinitial = strduplicate(value); + pdbFldDes->initial = epicsStrDup(value); return; } if(strcmp(name,"promptgroup")==0) { @@ -524,7 +516,7 @@ static void dbRecordtypeFieldItem(char *name,char *value) return; } if(strcmp(name,"prompt")==0) { - pdbFldDes->prompt = strduplicate(value); + pdbFldDes->prompt = epicsStrDup(value); return; } if(strcmp(name,"special")==0) { @@ -572,7 +564,7 @@ static void dbRecordtypeFieldItem(char *name,char *value) return; } if(strcmp(name,"extra")==0) { - pdbFldDes->extra = strduplicate(value); + pdbFldDes->extra = epicsStrDup(value); return; } if(strcmp(name,"menu")==0) { @@ -594,7 +586,7 @@ static void dbRecordtypeCdef(char *text) { pdbCdef = dbCalloc(1,sizeof(dbText)); if (text[0] == ' ') text++; /* strip leading space if present */ - pdbCdef->text = strduplicate(text); + pdbCdef->text = epicsStrDup(text); ellAdd(&pdbRecordType->cdefList, &pdbCdef->node); return; } @@ -714,8 +706,8 @@ static void dbDevice(char *recordtype,char *linktype, return; } pdevSup = dbCalloc(1,sizeof(devSup)); - pdevSup->name = strduplicate(dsetname); - pdevSup->choice = strduplicate(choicestring); + pdevSup->name = epicsStrDup(dsetname); + pdevSup->choice = epicsStrDup(choicestring); pdevSup->link_type = link_type; pgphentry = gphAdd(pdbbase->pgpHash,pdevSup->choice,&pdbRecordType->devList); if(!pgphentry) { @@ -736,7 +728,7 @@ static void dbDriver(char *name) return; } pdrvSup = dbCalloc(1,sizeof(drvSup)); - pdrvSup->name = strduplicate(name); + pdrvSup->name = epicsStrDup(name); pgphentry = gphAdd(pdbbase->pgpHash,pdrvSup->name,&pdbbase->drvList); if(!pgphentry) { yyerrorAbort("gphAdd failed"); @@ -755,7 +747,7 @@ static void dbRegistrar(char *name) return; } ptext = dbCalloc(1,sizeof(dbText)); - ptext->text = strduplicate(name); + ptext->text = epicsStrDup(name); pgphentry = gphAdd(pdbbase->pgpHash,ptext->text,&pdbbase->registrarList); if(!pgphentry) { yyerrorAbort("gphAdd failed"); @@ -775,7 +767,7 @@ static void dbBreakHead(char *name) return; } pbrkTable = dbCalloc(1,sizeof(brkTable)); - pbrkTable->name = strduplicate(name); + pbrkTable->name = epicsStrDup(name); if(ellCount(&tempList)) yyerrorAbort("dbBreakHead:tempList not empty"); allocTemp(pbrkTable); } @@ -783,7 +775,7 @@ static void dbBreakHead(char *name) static void dbBreakItem(char *value) { if(duplicate) return; - allocTemp(strduplicate(value)); + allocTemp(epicsStrDup(value)); } static void dbBreakBody(void) diff --git a/src/libCom/macLib/macCore.c b/src/libCom/macLib/macCore.c index f1cc5a145..08e5043a0 100644 --- a/src/libCom/macLib/macCore.c +++ b/src/libCom/macLib/macCore.c @@ -751,7 +751,7 @@ static void trans( MAC_HANDLE *handle, MAC_ENTRY *entry, long level, } /* - * strdup() implementation (because it's not always available) + * strdup() implementation which uses our own memory allocator */ static char *Strdup( char *string ) { diff --git a/src/libCom/misc/epicsString.c b/src/libCom/misc/epicsString.c index 5b6159129..f793bc2b6 100644 --- a/src/libCom/misc/epicsString.c +++ b/src/libCom/misc/epicsString.c @@ -103,3 +103,8 @@ epicsShareFunc int epicsShareAPI epicsStrCaseCmp( } return(0); } + +epicsShareFunc char * epicsShareAPI epicsStrDup(const char *s) +{ + return strcpy(mallocMustSucceed(strlen(s)+1,"epicsStrDup"),s); +} diff --git a/src/libCom/misc/epicsString.h b/src/libCom/misc/epicsString.h index 796195b40..7ff4a5055 100644 --- a/src/libCom/misc/epicsString.h +++ b/src/libCom/misc/epicsString.h @@ -25,6 +25,7 @@ extern "C" { epicsShareFunc int epicsShareAPI dbTranslateEscape(char *s,const char *ct); epicsShareFunc int epicsShareAPI epicsStrCaseCmp( const char *s1, const char *s2, int n); +epicsShareFunc char * epicsShareAPI epicsStrDup(const char *s); #ifdef __cplusplus }