iphreeqc/Var.c
Scott R Charlton e180be69b0 Rearranging IPhreeqc
git-svn-id: svn://136.177.114.72/svn_GW/IPhreeqc/trunk@4106 1feff8c3-07ed-0310-ac33-dd36852eb9cd
2010-02-23 05:04:35 +00:00

83 lines
1.3 KiB
C

#include "Var.h"
#include <string.h>
#include <malloc.h>
#include <assert.h>
// The VarInit function initializes the VAR
// by setting the type field to VT_EMPTY
//
void VarInit(VAR* pvar)
{
pvar->type = TT_EMPTY;
}
VRESULT VarClear(VAR* pvar)
{
switch (pvar->type)
{
case TT_EMPTY:
break;
case TT_LONG:
break;
case TT_DOUBLE:
break;
case TT_STRING:
VarFreeString(pvar->sVal);
break;
case TT_ERROR:
break;
default:
assert(0);
return VR_BADVARTYPE;
}
VarInit(pvar);
return VR_OK;
}
VRESULT VarCopy(VAR* pvarDest, const VAR* pvarSrc)
{
VarClear(pvarDest);
pvarDest->type = pvarSrc->type;
switch (pvarSrc->type)
{
case TT_EMPTY:
break;
case TT_LONG:
pvarDest->lVal = pvarSrc->lVal;
break;
case TT_DOUBLE:
pvarDest->dVal = pvarSrc->dVal;
break;
case TT_STRING:
pvarDest->sVal = VarAllocString(pvarSrc->sVal);
if (pvarDest->sVal == NULL && pvarSrc->sVal != NULL) {
pvarDest->type = TT_ERROR;
pvarDest->vresult = VR_OUTOFMEMORY;
return pvarDest->vresult;
}
break;
case TT_ERROR:
pvarDest->vresult = pvarSrc->vresult;
break;
default:
assert(0);
return VR_BADVARTYPE;
}
return VR_OK;
}
char* VarAllocString(const char* pSrc)
{
char* psz;
if (!pSrc) return NULL;
psz = (char*) malloc(strlen(pSrc) + 1);
strcpy(psz, pSrc);
return psz;
}
void VarFreeString(char* pSrc)
{
if (pSrc) free(pSrc);
}