Fix pointer cast alignment warnings in jim.c.

git-svn-id: svn://svn.berlios.de/openocd/trunk@1620 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
zwelch 2009-05-06 21:21:18 +00:00
parent b33779fbbe
commit 4b127e229b
1 changed files with 17 additions and 8 deletions

View File

@ -7650,6 +7650,8 @@ static int ScanOneEntry(Jim_Interp *interp, const char *str, long pos,
scanned += 1; scanned += 1;
break; break;
case 'd': case 'o': case 'x': case 'u': case 'i': { case 'd': case 'o': case 'x': case 'u': case 'i': {
jim_wide jwvalue;
long lvalue;
char *endp; /* Position where the number finished */ char *endp; /* Position where the number finished */
int base = descr->type == 'o' ? 8 int base = descr->type == 'o' ? 8
: descr->type == 'x' ? 16 : descr->type == 'x' ? 16
@ -7659,16 +7661,22 @@ static int ScanOneEntry(Jim_Interp *interp, const char *str, long pos,
do { do {
/* Try to scan a number with the given base */ /* Try to scan a number with the given base */
if (descr->modifier == 'l') if (descr->modifier == 'l')
{
#ifdef HAVE_LONG_LONG #ifdef HAVE_LONG_LONG
*(jim_wide*)value = JimStrtoll(tok, &endp, base); jwvalue = JimStrtoll(tok, &endp, base),
#else #else
*(jim_wide*)value = strtol(tok, &endp, base); jwvalue = strtol(tok, &endp, base),
#endif #endif
memcpy(value, &jwvalue, sizeof(jim_wide));
}
else else
{
if (descr->type == 'u') if (descr->type == 'u')
*(long*)value = strtoul(tok, &endp, base); lvalue = strtoul(tok, &endp, base);
else 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 /* If scanning failed, and base was undetermined, simply
* put it to 10 and try once more. This should catch the * put it to 10 and try once more. This should catch the
* case where %i begin to parse a number prefix (e.g. * case where %i begin to parse a number prefix (e.g.
@ -7680,9 +7688,9 @@ static int ScanOneEntry(Jim_Interp *interp, const char *str, long pos,
if (endp != tok) { if (endp != tok) {
/* There was some number sucessfully scanned! */ /* There was some number sucessfully scanned! */
if (descr->modifier == 'l') if (descr->modifier == 'l')
*valObjPtr = Jim_NewIntObj(interp, *(jim_wide*)value); *valObjPtr = Jim_NewIntObj(interp, jwvalue);
else else
*valObjPtr = Jim_NewIntObj(interp, *(long*)value); *valObjPtr = Jim_NewIntObj(interp, lvalue);
/* Adjust the number-of-chars scanned so far */ /* Adjust the number-of-chars scanned so far */
scanned += endp - tok; scanned += endp - tok;
} else { } else {
@ -7701,10 +7709,11 @@ static int ScanOneEntry(Jim_Interp *interp, const char *str, long pos,
case 'e': case 'f': case 'g': { case 'e': case 'f': case 'g': {
char *endp; char *endp;
*(double*)value = strtod(tok, &endp); double dvalue = strtod(tok, &endp);
memcpy(value, &dvalue, sizeof(double));
if (endp != tok) { if (endp != tok) {
/* There was some number sucessfully scanned! */ /* 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 */ /* Adjust the number-of-chars scanned so far */
scanned += endp - tok; scanned += endp - tok;
} else { } else {