* are those of the authors and should not be interpreted as representing
* official policies, either expressed or implied, of the Jim Tcl Project.
**/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#define __JIM_CORE__
#define JIM_OPTIMIZATION /* comment to avoid optimizations and reduce size */
#ifdef __ECOS
#include <pkgconf/jimtcl.h>
-#endif
-#ifndef JIM_ANSIC
-#define JIM_DYNLIB /* Dynamic library support for UNIX and WIN32 */
-#endif /* JIM_ANSIC */
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE /* for vasprintf() */
-#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <errno.h>
#include <time.h>
-#if defined(WIN32)
-/* sys/time - need is different */
-#else
-#include <sys/time.h> // for gettimeofday()
#endif
+#ifndef JIM_ANSIC
+#define JIM_DYNLIB /* Dynamic library support for UNIX and WIN32 */
+#endif /* JIM_ANSIC */
-#include "replacements.h"
+#include <stdarg.h>
+#include <limits.h>
/* Include the platform dependent libraries for
* dynamic loading of libraries. */
#endif /* WIN32 */
#endif /* JIM_DYNLIB */
-#ifndef WIN32
-#include <unistd.h>
-#endif
-
#ifdef __ECOS
#include <cyg/jimtcl/jim.h>
#else
static void JimFreeCallFrame(Jim_Interp *interp, Jim_CallFrame *cf, int flags);
static void JimRegisterCoreApi(Jim_Interp *interp);
-static Jim_HashTableType JimVariablesHashTableType;
+static Jim_HashTableType *getJimVariablesHashTableType(void);
/* -----------------------------------------------------------------------------
* Utility functions
* Ignores `locale' stuff. Assumes that the upper and lower case
* alphabets and digits are each contiguous.
*/
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
#define JimIsAscii(c) (((c) & ~0x7f) == 0)
static jim_wide JimStrtoll(const char *nptr, char **endptr, register int base)
{
{
char *endptr;
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
*widePtr = JimStrtoll(str, &endptr, base);
#else
*widePtr = strtol(str, &endptr, base);
#endif
/* This may actually crash... we do it last */
- if( interp && interp->cookie_stderr ){
+ if ( interp && interp->cookie_stderr ){
Jim_fprintf( interp, interp->cookie_stderr, JIM_NL "JIM INTERPRETER PANIC: ");
Jim_vfprintf( interp, interp->cookie_stderr, fmt, ap );
Jim_fprintf( interp, interp->cookie_stderr, JIM_NL JIM_NL );
buf = jim_vasprintf( fmt, ap );
va_end(ap);
- if( buf ){
+ if ( buf ){
Jim_AppendString( interp, objPtr, buf, -1 );
jim_vasprintf_done(buf);
}
haveprec = 0;
prec = -1; /* not found yet */
next_fmt:
- if( fmtLen <= 0 ){
+ if ( fmtLen <= 0 ){
break;
}
switch( *fmt ){
accum = (accum * 10) + (*fmt - '0');
fmt++; fmtLen--;
}
- if( inprec ){
+ if ( inprec ){
haveprec = 1;
prec = accum;
} else {
/* suck up the next item as an integer */
fmt++; fmtLen--;
objc--;
- if( objc <= 0 ){
+ if ( objc <= 0 ){
goto not_enough_args;
}
- if( Jim_GetWide(interp,objv[0],&wideValue )== JIM_ERR ){
+ if ( Jim_GetWide(interp,objv[0],&wideValue )== JIM_ERR ){
Jim_FreeNewObj(interp, resObjPtr );
return NULL;
}
- if( inprec ){
+ if ( inprec ){
haveprec = 1;
prec = wideValue;
- if( prec < 0 ){
+ if ( prec < 0 ){
/* man 3 printf says */
/* if prec is negative, it is zero */
prec = 0;
}
} else {
width = wideValue;
- if( width < 0 ){
+ if ( width < 0 ){
ljust = 1;
width = -width;
}
*/
cp = fmt_str;
*cp++ = '%';
- if( altfm ){
+ if ( altfm ){
*cp++ = '#';
}
- if( forceplus ){
+ if ( forceplus ){
*cp++ = '+';
- } else if( spad ){
+ } else if ( spad ){
/* PLUS overrides */
*cp++ = ' ';
}
- if( ljust ){
+ if ( ljust ){
*cp++ = '-';
}
- if( zpad ){
+ if ( zpad ){
*cp++ = '0';
}
- if( width > 0 ){
+ if ( width > 0 ){
sprintf( cp, "%d", width );
/* skip ahead */
cp = strchr(cp,0);
}
/* did we find a period? */
- if( inprec ){
+ if ( inprec ){
/* then add it */
*cp++ = '.';
/* did something occur after the period? */
- if( haveprec ){
+ if ( haveprec ){
sprintf( cp, "%d", prec );
}
cp = strchr(cp,0);
case 'E':
*cp++ = *fmt;
*cp = 0;
- if( Jim_GetDouble( interp, objv[0], &doubleValue ) == JIM_ERR ){
+ if ( Jim_GetDouble( interp, objv[0], &doubleValue ) == JIM_ERR ){
Jim_FreeNewObj( interp, resObjPtr );
return NULL;
}
case 'x':
case 'X':
/* jim widevaluse are 64bit */
- if( sizeof(jim_wide) == sizeof(long long) ){
+ if ( sizeof(jim_wide) == sizeof(long long) ){
*cp++ = 'l';
*cp++ = 'l';
} else {
int e;
e = Jim_Nvp_name2value_obj( interp, nvp_table, objPtr, &n );
- if( e == JIM_ERR ){
+ if ( e == JIM_ERR ){
return e;
}
/* Success? found? */
- if( n->name ){
+ if ( n->name ){
/* remove const */
*result = (Jim_Nvp *)n;
return JIM_OK;
Jim_ListLength(interp, staticsListObjPtr, &len);
if (len != 0) {
cmdPtr->staticVars = Jim_Alloc(sizeof(Jim_HashTable));
- Jim_InitHashTable(cmdPtr->staticVars, &JimVariablesHashTableType,
+ Jim_InitHashTable(cmdPtr->staticVars, getJimVariablesHashTableType(),
interp);
for (i = 0; i < len; i++) {
Jim_Obj *objPtr, *initObjPtr, *nameObjPtr;
JimVariablesHTValDestructor /* val destructor */
};
+static Jim_HashTableType *getJimVariablesHashTableType(void)
+{
+ return &JimVariablesHashTableType;
+}
+
/* -----------------------------------------------------------------------------
* Variable object
* ---------------------------------------------------------------------------*/
int Jim_DictKeysVector(Jim_Interp *interp, Jim_Obj *dictPtr,
Jim_Obj *const *keyv, int keyc, Jim_Obj **objPtrPtr, int flags)
{
- Jim_Obj *objPtr;
+ Jim_Obj *objPtr = NULL;
int i;
if (keyc == 0) {
scanned += 1;
break;
case 'd': case 'o': case 'x': case 'u': case 'i': {
+ jim_wide jwvalue = 0;
+ long lvalue = 0;
char *endp; /* Position where the number finished */
int base = descr->type == 'o' ? 8
: descr->type == 'x' ? 16
do {
/* Try to scan a number with the given base */
if (descr->modifier == 'l')
-#ifdef HAVE_LONG_LONG
- *(jim_wide*)value = JimStrtoll(tok, &endp, base);
+ {
+#ifdef HAVE_LONG_LONG_INT
+ jwvalue = JimStrtoll(tok, &endp, base),
#else
- *(jim_wide*)value = strtol(tok, &endp, base);
+ jwvalue = strtol(tok, &endp, base),
#endif
+ memcpy(value, &jwvalue, sizeof(jim_wide));
+ }
else
+ {
if (descr->type == 'u')
- *(long*)value = strtoul(tok, &endp, base);
+ lvalue = strtoul(tok, &endp, base);
else
- *(long*)value = strtol(tok, &endp, base);
+ lvalue = strtol(tok, &endp, base);
+ memcpy(value, &lvalue, sizeof(lvalue));
+ }
/* If scanning failed, and base was undetermined, simply
* put it to 10 and try once more. This should catch the
* case where %i begin to parse a number prefix (e.g.
if (endp != tok) {
/* There was some number sucessfully scanned! */
if (descr->modifier == 'l')
- *valObjPtr = Jim_NewIntObj(interp, *(jim_wide*)value);
+ *valObjPtr = Jim_NewIntObj(interp, jwvalue);
else
- *valObjPtr = Jim_NewIntObj(interp, *(long*)value);
+ *valObjPtr = Jim_NewIntObj(interp, lvalue);
/* Adjust the number-of-chars scanned so far */
scanned += endp - tok;
} else {
case 'e': case 'f': case 'g': {
char *endp;
- *(double*)value = strtod(tok, &endp);
+ double dvalue = strtod(tok, &endp);
+ memcpy(value, &dvalue, sizeof(double));
if (endp != tok) {
/* There was some number sucessfully scanned! */
- *valObjPtr = Jim_NewDoubleObj(interp, *(double*)value);
+ *valObjPtr = Jim_NewDoubleObj(interp, dvalue);
/* Adjust the number-of-chars scanned so far */
scanned += endp - tok;
} else {
{
DIR *dir = 0;
- if(name && name[0]) {
+ if (name && name[0]) {
size_t base_length = strlen(name);
const char *all = /* search pattern must end with suitable wildcard */
strchr("/\\", name[base_length - 1]) ? "*" : "/*";
- if((dir = (DIR *) Jim_Alloc(sizeof *dir)) != 0 &&
+ if ((dir = (DIR *) Jim_Alloc(sizeof *dir)) != 0 &&
(dir->name = (char *) Jim_Alloc(base_length + strlen(all) + 1)) != 0)
{
strcat(strcpy(dir->name, name), all);
- if((dir->handle = (long) _findfirst(dir->name, &dir->info)) != -1)
+ if ((dir->handle = (long) _findfirst(dir->name, &dir->info)) != -1)
dir->result.d_name = 0;
else { /* rollback */
Jim_Free(dir->name);
{
int result = -1;
- if(dir) {
- if(dir->handle != -1)
+ if (dir) {
+ if (dir->handle != -1)
result = _findclose(dir->handle);
Jim_Free(dir->name);
Jim_Free(dir);
}
- if(result == -1) /* map all errors to EBADF */
+ if (result == -1) /* map all errors to EBADF */
errno = EBADF;
return result;
}
{
struct dirent *result = 0;
- if(dir && dir->handle != -1) {
- if(!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) {
+ if (dir && dir->handle != -1) {
+ if (!dir->result.d_name || _findnext(dir->handle, &dir->info) != -1) {
result = &dir->result;
result->d_name = dir->info.name;
}
Jim_IncrRefCount(scriptObjPtr);
- if( filename ){
+ if ( filename ){
JimSetSourceInfo( interp, scriptObjPtr, filename, lineno );
}
if (argc == 1) {
-#ifndef HAVE_UNISTD_H
+#ifdef NEED_ENVIRON_EXTERN
extern char **environ;
#endif
int Jim_vfprintf( Jim_Interp *interp, void *cookie, const char *fmt, va_list ap )
{
- if( (interp == NULL) || (interp->cb_vfprintf == NULL) ){
+ if ( (interp == NULL) || (interp->cb_vfprintf == NULL) ){
errno = ENOTSUP;
return -1;
}
size_t Jim_fwrite( Jim_Interp *interp, const void *ptr, size_t size, size_t n, void *cookie )
{
- if( (interp == NULL) || (interp->cb_fwrite == NULL) ){
+ if ( (interp == NULL) || (interp->cb_fwrite == NULL) ){
errno = ENOTSUP;
return 0;
}
size_t Jim_fread( Jim_Interp *interp, void *ptr, size_t size, size_t n, void *cookie )
{
- if( (interp == NULL) || (interp->cb_fread == NULL) ){
+ if ( (interp == NULL) || (interp->cb_fread == NULL) ){
errno = ENOTSUP;
return 0;
}
int Jim_fflush( Jim_Interp *interp, void *cookie )
{
- if( (interp == NULL) || (interp->cb_fflush == NULL) ){
+ if ( (interp == NULL) || (interp->cb_fflush == NULL) ){
/* pretend all is well */
return 0;
}
char* Jim_fgets( Jim_Interp *interp, char *s, int size, void *cookie )
{
- if( (interp == NULL) || (interp->cb_fgets == NULL) ){
+ if ( (interp == NULL) || (interp->cb_fgets == NULL) ){
errno = ENOTSUP;
return NULL;
}
Jim_Nvp_name2value_simple( const Jim_Nvp *p, const char *name )
{
while( p->name ){
- if( 0 == strcmp( name, p->name ) ){
+ if ( 0 == strcmp( name, p->name ) ){
break;
}
p++;
Jim_Nvp_name2value_nocase_simple( const Jim_Nvp *p, const char *name )
{
while( p->name ){
- if( 0 == strcasecmp( name, p->name ) ){
+ if ( 0 == strcasecmp( name, p->name ) ){
break;
}
p++;
p = Jim_Nvp_name2value_simple( _p, name );
/* result */
- if( result ){
+ if ( result ){
*result = (Jim_Nvp *)(p);
}
/* found? */
- if( p->name ){
+ if ( p->name ){
return JIM_OK;
} else {
return JIM_ERR;
p = Jim_Nvp_name2value_nocase_simple( _p, name );
- if( puthere ){
+ if ( puthere ){
*puthere = (Jim_Nvp *)(p);
}
/* found */
- if( p->name ){
+ if ( p->name ){
return JIM_OK;
} else {
return JIM_ERR;
jim_wide w;
e = Jim_GetWide( interp, o, &w );
- if( e != JIM_OK ){
+ if ( e != JIM_OK ){
return e;
}
Jim_Nvp_value2name_simple( const Jim_Nvp *p, int value )
{
while( p->name ){
- if( value == p->value ){
+ if ( value == p->value ){
break;
}
p++;
p = Jim_Nvp_value2name_simple( _p, value );
- if( result ){
+ if ( result ){
*result = (Jim_Nvp *)(p);
}
- if( p->name ){
+ if ( p->name ){
return JIM_OK;
} else {
return JIM_ERR;
Jim_Obj *o;
o = NULL; // failure
- if( goi->argc ){
+ if ( goi->argc ){
// success
o = goi->argv[0];
goi->argc -= 1;
goi->argv += 1;
}
- if( puthere ){
+ if ( puthere ){
*puthere = o;
}
- if( o != NULL ){
+ if ( o != NULL ){
return JIM_OK;
} else {
return JIM_ERR;
r = Jim_GetOpt_Obj( goi, &o );
- if( r == JIM_OK ){
+ if ( r == JIM_OK ){
cp = Jim_GetString( o, len );
- if( puthere ){
+ if ( puthere ){
/* remove const */
*puthere = (char *)(cp);
}
Jim_Obj *o;
double _safe;
- if( puthere == NULL ){
+ if ( puthere == NULL ){
puthere = &_safe;
}
r = Jim_GetOpt_Obj( goi, &o );
- if( r == JIM_OK ){
+ if ( r == JIM_OK ){
r = Jim_GetDouble( goi->interp, o, puthere );
- if( r != JIM_OK ){
+ if ( r != JIM_OK ){
Jim_SetResult_sprintf( goi->interp,
"not a number: %s",
Jim_GetString( o, NULL ) );
Jim_Obj *o;
jim_wide _safe;
- if( puthere == NULL ){
+ if ( puthere == NULL ){
puthere = &_safe;
}
r = Jim_GetOpt_Obj( goi, &o );
- if( r == JIM_OK ){
+ if ( r == JIM_OK ){
r = Jim_GetWide( goi->interp, o, puthere );
}
return r;
Jim_Obj *o;
int e;
- if( puthere == NULL ){
+ if ( puthere == NULL ){
puthere = &_safe;
}
e = Jim_GetOpt_Obj( goi, &o );
- if( e == JIM_OK ){
+ if ( e == JIM_OK ){
e = Jim_Nvp_name2value_obj( goi->interp,
nvp,
o,
const Jim_Nvp *nvptable,
int hadprefix )
{
- if( hadprefix ){
+ if ( hadprefix ){
Jim_SetResult_NvpUnknown( goi->interp,
goi->argv[-2],
goi->argv[-1],
Jim_Obj *o;
int e;
- if( puthere == NULL ){
+ if ( puthere == NULL ){
puthere = &_safe;
}
e = Jim_GetOpt_Obj( goi, &o );
- if( e == JIM_OK ){
+ if ( e == JIM_OK ){
e = Jim_GetEnum( goi->interp,
o,
lookup,
va_start(ap,fmt);
buf = jim_vasprintf( fmt, ap );
va_end(ap);
- if( buf ){
+ if ( buf ){
Jim_SetResultString( interp, buf, -1 );
jim_vasprintf_done(buf);
}
Jim_Obj *param_value,
const Jim_Nvp *nvp )
{
- if( param_name ){
+ if ( param_name ){
Jim_SetResult_sprintf( interp,
"%s: Unknown: %s, try one of: ",
Jim_GetString( param_name, NULL ),
const char *a;
const char *b;
- if( (nvp+1)->name ){
+ if ( (nvp+1)->name ){
a = nvp->name;
b = ", ";
} else {
{
int x;
- if( debug_string_obj ){
+ if ( debug_string_obj ){
Jim_FreeObj( interp, debug_string_obj );
}
return Jim_GetString( debug_string_obj, NULL );
}
-
-
-
-/*
- * Local Variables: ***
- * c-basic-offset: 4 ***
- * tab-width: 4 ***
- * End: ***
- */