diff options
Diffstat (limited to 'src/strngrtr.c')
-rw-r--r-- | src/strngrtr.c | 121 |
1 files changed, 70 insertions, 51 deletions
diff --git a/src/strngrtr.c b/src/strngrtr.c index 70784ca..69c82db 100644 --- a/src/strngrtr.c +++ b/src/strngrtr.c @@ -1,7 +1,7 @@ /*******************************************************/ /* "C" Language Integrated Production System */ /* */ - /* CLIPS Version 6.22 06/15/04 */ + /* CLIPS Version 6.30 08/16/14 */ /* */ /* STRING I/O ROUTER MODULE */ /*******************************************************/ @@ -14,10 +14,21 @@ /* Gary D. Riley */ /* */ /* Contributing Programmer(s): */ -/* Brian L. Donnell */ +/* Brian L. Dantes */ /* */ /* Revision History: */ /* */ +/* 6.30: Used genstrcpy instead of strcpy. */ +/* */ +/* Removed conditional code for unsupported */ +/* compilers/operating systems (IBM_MCW, */ +/* MAC_MCW, and IBM_TBC). */ +/* */ +/* Changed integer type/precision. */ +/* */ +/* Added const qualifiers to remove C++ */ +/* deprecation warnings. */ +/* */ /*************************************************************/ #define _STRNGRTR_SOURCE_ @@ -33,6 +44,7 @@ #include "envrnmnt.h" #include "memalloc.h" #include "router.h" +#include "sysdep.h" #include "strngrtr.h" @@ -43,12 +55,12 @@ /* LOCAL INTERNAL FUNCTION DEFINITIONS */ /***************************************/ - static int FindString(void *,char *); - static int PrintString(void *,char *,char *); - static int GetcString(void *,char *); - static int UngetcString(void *,int,char *); - static struct stringRouter *FindStringRouter(void *,char *); - static int CreateReadStringSource(void *,char *,char *,int,unsigned); + static int FindString(void *,const char *); + static int PrintString(void *,const char *,const char *); + static int GetcString(void *,const char *); + static int UngetcString(void *,int,const char *); + static struct stringRouter *FindStringRouter(void *,const char *); + static int CreateReadStringSource(void *,const char *,const char *,size_t,size_t); static void DeallocateStringRouterData(void *); /**********************************************************/ @@ -61,7 +73,7 @@ globle void InitializeStringRouter( EnvAddRouter(theEnv,"string",0,FindString,PrintString,GetcString,UngetcString,NULL); } - + /*******************************************/ /* DeallocateStringRouterData: Deallocates */ /* environment data for string routers. */ @@ -70,12 +82,12 @@ static void DeallocateStringRouterData( void *theEnv) { struct stringRouter *tmpPtr, *nextPtr; - + tmpPtr = StringRouterData(theEnv)->ListOfStringRouters; while (tmpPtr != NULL) { nextPtr = tmpPtr->next; - rm(theEnv,tmpPtr->name,strlen(tmpPtr->name) + 1); + rm(theEnv,(void *) tmpPtr->name,strlen(tmpPtr->name) + 1); rtn_struct(theEnv,stringRouter,tmpPtr); tmpPtr = nextPtr; } @@ -86,7 +98,7 @@ static void DeallocateStringRouterData( /*************************************************************/ static int FindString( void *theEnv, - char *fileid) + const char *fileid) { struct stringRouter *head; @@ -106,8 +118,8 @@ static int FindString( /**************************************************/ static int PrintString( void *theEnv, - char *logicalName, - char *str) + const char *logicalName, + const char *str) { struct stringRouter *head; @@ -119,12 +131,16 @@ static int PrintString( } if (head->readWriteType != WRITE_STRING) return(1); - if (head->currentPosition >= (int) (head->maximumPosition - 1)) return(1); - strncpy(&head->str[head->currentPosition], - str,(STD_SIZE) (head->maximumPosition - head->currentPosition) - 1); + if (head->maximumPosition == 0) return(1); + + if ((head->currentPosition + 1) >= head->maximumPosition) return(1); + + genstrncpy(&head->writeString[head->currentPosition], + str,(STD_SIZE) (head->maximumPosition - head->currentPosition) - 1); + + head->currentPosition += strlen(str); - head->currentPosition += (int) strlen(str); return(1); } @@ -133,7 +149,7 @@ static int PrintString( /************************************************/ static int GetcString( void *theEnv, - char *logicalName) + const char *logicalName) { struct stringRouter *head; int rc; @@ -146,13 +162,13 @@ static int GetcString( } if (head->readWriteType != READ_STRING) return(EOF); - if (head->currentPosition >= (int) head->maximumPosition) + if (head->currentPosition >= head->maximumPosition) { head->currentPosition++; return(EOF); } - rc = (unsigned char) head->str[head->currentPosition]; + rc = (unsigned char) head->readString[head->currentPosition]; head->currentPosition++; return(rc); @@ -161,16 +177,13 @@ static int GetcString( /****************************************************/ /* UngetcString: Ungetc routine for string routers. */ /****************************************************/ -#if IBM_TBC -#pragma argsused -#endif static int UngetcString( void *theEnv, int ch, - char *logicalName) + const char *logicalName) { struct stringRouter *head; -#if MAC_MCW || IBM_MCW || MAC_XCD +#if MAC_XCD #pragma unused(ch) #endif @@ -194,11 +207,11 @@ static int UngetcString( /************************************************/ globle int OpenStringSource( void *theEnv, - char *name, - char *str, - int currentPosition) + const char *name, + const char *str, + size_t currentPosition) { - unsigned maximumPosition; + size_t maximumPosition; if (str == NULL) { @@ -217,10 +230,10 @@ globle int OpenStringSource( /******************************************************/ globle int OpenTextSource( void *theEnv, - char *name, - char *str, - int currentPosition, - unsigned maximumPosition) + const char *name, + const char *str, + size_t currentPosition, + size_t maximumPosition) { if (str == NULL) { @@ -236,19 +249,22 @@ globle int OpenTextSource( /******************************************************************/ static int CreateReadStringSource( void *theEnv, - char *name, - char *str, - int currentPosition, - unsigned maximumPosition) + const char *name, + const char *str, + size_t currentPosition, + size_t maximumPosition) { struct stringRouter *newStringRouter; + char *theName; if (FindStringRouter(theEnv,name) != NULL) return(0); newStringRouter = get_struct(theEnv,stringRouter); - newStringRouter->name = (char *) gm1(theEnv,(int) strlen(name) + 1); - strcpy(newStringRouter->name,name); - newStringRouter->str = str; + theName = (char *) gm1(theEnv,strlen(name) + 1); + genstrcpy(theName,name); + newStringRouter->name = theName; + newStringRouter->writeString = NULL; + newStringRouter->readString = str; newStringRouter->currentPosition = currentPosition; newStringRouter->readWriteType = READ_STRING; newStringRouter->maximumPosition = maximumPosition; @@ -263,7 +279,7 @@ static int CreateReadStringSource( /**********************************************/ globle int CloseStringSource( void *theEnv, - char *name) + const char *name) { struct stringRouter *head, *last; @@ -276,14 +292,14 @@ globle int CloseStringSource( if (last == NULL) { StringRouterData(theEnv)->ListOfStringRouters = head->next; - rm(theEnv,head->name,strlen(head->name) + 1); + rm(theEnv,(void *) head->name,strlen(head->name) + 1); rtn_struct(theEnv,stringRouter,head); return(1); } else { last->next = head->next; - rm(theEnv,head->name,strlen(head->name) + 1); + rm(theEnv,(void *) head->name,strlen(head->name) + 1); rtn_struct(theEnv,stringRouter,head); return(1); } @@ -300,18 +316,21 @@ globle int CloseStringSource( /******************************************************************/ globle int OpenStringDestination( void *theEnv, - char *name, + const char *name, char *str, - unsigned maximumPosition) + size_t maximumPosition) { struct stringRouter *newStringRouter; + char *theName; if (FindStringRouter(theEnv,name) != NULL) return(0); newStringRouter = get_struct(theEnv,stringRouter); - newStringRouter->name = (char *) gm1(theEnv,(int) strlen(name) + 1); - strcpy(newStringRouter->name,name); - newStringRouter->str = str; + theName = (char *) gm1(theEnv,(int) strlen(name) + 1); + genstrcpy(theName,name); + newStringRouter->name = theName; + newStringRouter->readString = NULL; + newStringRouter->writeString = str; newStringRouter->currentPosition = 0; newStringRouter->readWriteType = WRITE_STRING; newStringRouter->maximumPosition = maximumPosition; @@ -326,7 +345,7 @@ globle int OpenStringDestination( /***************************************************/ globle int CloseStringDestination( void *theEnv, - char *name) + const char *name) { return(CloseStringSource(theEnv,name)); } @@ -336,7 +355,7 @@ globle int CloseStringDestination( /*******************************************************************/ static struct stringRouter *FindStringRouter( void *theEnv, - char *name) + const char *name) { struct stringRouter *head; |