diff options
-rw-r--r-- | src/Converters.c | 84 |
1 files changed, 45 insertions, 39 deletions
diff --git a/src/Converters.c b/src/Converters.c index 35bc346..13aaf50 100644 --- a/src/Converters.c +++ b/src/Converters.c @@ -135,7 +135,7 @@ void _XtConvertInitialize(void) _XtQString = XrmPermStringToQuark(XtRString); } -#define donestr(type, value, tstr) \ +#define done_typed_string(type, typed_value, tstr) \ { \ if (toVal->addr != NULL) { \ if (toVal->size < sizeof(type)) { \ @@ -144,35 +144,41 @@ void _XtConvertInitialize(void) (char*) fromVal->addr, tstr); \ return False; \ } \ - *(type*)(toVal->addr) = (type) (value); \ + *(type*)(toVal->addr) = typed_value; \ } \ else { \ static type static_val; \ - static_val = (type) (value); \ + static_val = typed_value; \ toVal->addr = (XPointer)&static_val; \ } \ toVal->size = sizeof(type); \ return True; \ } -#define done(type, value) \ +#define done_string(type, value, tstr) \ + done_typed_string(type, (type) (value), tstr) + +#define done_typed(type, typed_value) \ { \ if (toVal->addr != NULL) { \ if (toVal->size < sizeof(type)) { \ toVal->size = sizeof(type); \ return False; \ } \ - *(type*)(toVal->addr) = (type) (value); \ + *(type*)(toVal->addr) = typed_value; \ } \ else { \ static type static_val; \ - static_val = (type) (value); \ + static_val = typed_value; \ toVal->addr = (XPointer)&static_val; \ } \ toVal->size = sizeof(type); \ return True; \ } +#define done(type, value) \ + done_typed(type, (type) (value)) + void XtDisplayStringConversionWarning( Display* dpy, _Xconst char* from, @@ -354,12 +360,12 @@ Boolean XtCvtStringToBoolean( if ( (CompareISOLatin1(str, "true") == 0) || (CompareISOLatin1(str, "yes") == 0) || (CompareISOLatin1(str, "on") == 0) - || (CompareISOLatin1(str, "1") == 0)) donestr( Boolean, True, XtRBoolean ); + || (CompareISOLatin1(str, "1") == 0)) done_string( Boolean, True, XtRBoolean ); if ( (CompareISOLatin1(str, "false") == 0) || (CompareISOLatin1(str, "no") == 0) || (CompareISOLatin1(str, "off") == 0) - || (CompareISOLatin1(str, "0") == 0)) donestr( Boolean, False, XtRBoolean ); + || (CompareISOLatin1(str, "0") == 0)) done_string( Boolean, False, XtRBoolean ); XtDisplayStringConversionWarning(dpy, str, XtRBoolean); return False; @@ -404,12 +410,12 @@ Boolean XtCvtStringToBool( if ( (CompareISOLatin1(str, "true") == 0) || (CompareISOLatin1(str, "yes") == 0) || (CompareISOLatin1(str, "on") == 0) - || (CompareISOLatin1(str, "1") == 0)) donestr( Bool, True, XtRBool ); + || (CompareISOLatin1(str, "1") == 0)) done_string( Bool, True, XtRBool ); if ( (CompareISOLatin1(str, "false") == 0) || (CompareISOLatin1(str, "no") == 0) || (CompareISOLatin1(str, "off") == 0) - || (CompareISOLatin1(str, "0") == 0)) donestr( Bool, False, XtRBool ); + || (CompareISOLatin1(str, "0") == 0)) done_string( Bool, False, XtRBool ); XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRBool); return False; @@ -448,7 +454,7 @@ Boolean XtCvtIntToColor( c.pixel = (unsigned long) (*(int *)fromVal->addr); XQueryColor(DisplayOfScreen(screen), colormap, &c); - done(XColor, c); + done_typed(XColor, c); } @@ -482,13 +488,13 @@ Boolean XtCvtStringToPixel( if (CompareISOLatin1(str, XtDefaultBackground) == 0) { *closure_ret = NULL; - if (pd->rv) donestr(Pixel, BlackPixelOfScreen(screen), XtRPixel) - else donestr(Pixel, WhitePixelOfScreen(screen), XtRPixel); + if (pd->rv) done_string(Pixel, BlackPixelOfScreen(screen), XtRPixel) + else done_string(Pixel, WhitePixelOfScreen(screen), XtRPixel); } if (CompareISOLatin1(str, XtDefaultForeground) == 0) { *closure_ret = NULL; - if (pd->rv) donestr(Pixel, WhitePixelOfScreen(screen), XtRPixel) - else donestr(Pixel, BlackPixelOfScreen(screen), XtRPixel); + if (pd->rv) done_string(Pixel, WhitePixelOfScreen(screen), XtRPixel) + else done_string(Pixel, BlackPixelOfScreen(screen), XtRPixel); } status = XAllocNamedColor(DisplayOfScreen(screen), colormap, @@ -516,7 +522,7 @@ Boolean XtCvtStringToPixel( return False; } else { *closure_ret = (char*)True; - donestr(Pixel, screenColor.pixel, XtRPixel); + done_string(Pixel, screenColor.pixel, XtRPixel); } } @@ -684,7 +690,7 @@ Boolean XtCvtStringToCursor( if (strcmp(name, nP->name) == 0) { Display *display = *(Display**)args[0].addr; Cursor cursor = XCreateFontCursor(display, nP->shape ); - donestr(Cursor, cursor, XtRCursor); + done_string(Cursor, cursor, XtRCursor); } } XtDisplayStringConversionWarning(dpy, name, XtRCursor); @@ -732,7 +738,7 @@ Boolean XtCvtStringToDisplay( d = XOpenDisplay((char *)fromVal->addr); if (d != NULL) - donestr(Display*, d, XtRDisplay); + done_string(Display*, d, XtRDisplay); XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRDisplay); return False; @@ -758,7 +764,7 @@ Boolean XtCvtStringToFile( f = fopen((char *)fromVal->addr, "r"); if (f != NULL) - donestr(FILE*, f, XtRFile); + done_string(FILE*, f, XtRFile); XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRFile); return False; @@ -826,7 +832,7 @@ Boolean XtCvtStringToFloat( XtDisplayStringConversionWarning (dpy, (char*) fromVal->addr, XtRFloat); return False; } - donestr(float, f, XtRFloat); + done_string(float, f, XtRFloat); } /*ARGSUSED*/ @@ -854,7 +860,7 @@ Boolean XtCvtStringToFont( if (CompareISOLatin1((String)fromVal->addr, XtDefaultFont) != 0) { f = XLoadFont(display, (char *)fromVal->addr); if (f != 0) { - Done: donestr( Font, f, XtRFont ); + Done: done_string( Font, f, XtRFont ); } XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRFont); } @@ -976,7 +982,7 @@ Boolean XtCvtStringToFontSet( XFreeStringList(missing_charset_list); } if (f != NULL) { - Done: donestr( XFontSet, f, XtRFontSet ); + Done: done_string( XFontSet, f, XtRFontSet ); } XtDisplayStringConversionWarning(dpy, (char *)fromVal->addr, XtRFontSet); } @@ -1110,7 +1116,7 @@ XtCvtStringToFontStruct( if (CompareISOLatin1((String)fromVal->addr, XtDefaultFont) != 0) { f = XLoadQueryFont(display, (char *)fromVal->addr); if (f != NULL) { - Done: donestr( XFontStruct*, f, XtRFontStruct); + Done: done_string( XFontStruct*, f, XtRFontStruct); } XtDisplayStringConversionWarning(dpy, (char*)fromVal->addr, @@ -1198,7 +1204,7 @@ Boolean XtCvtStringToInt( "String to Integer conversion needs no extra arguments", NULL, NULL); if (IsInteger((String)fromVal->addr, &i)) - donestr(int, i, XtRInt); + done_string(int, i, XtRInt); XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRInt); return False; @@ -1221,7 +1227,7 @@ Boolean XtCvtStringToShort( "String to Integer conversion needs no extra arguments", NULL, NULL); if (IsInteger((String)fromVal->addr, &i)) - donestr(short, (short)i, XtRShort); + done_string(short, (short)i, XtRShort); XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRShort); return False; @@ -1247,7 +1253,7 @@ Boolean XtCvtStringToDimension( if ( i < 0 ) XtDisplayStringConversionWarning(dpy, (char*)fromVal->addr, XtRDimension); - donestr(Dimension, (Dimension)i, XtRDimension); + done_string(Dimension, (Dimension)i, XtRDimension); } XtDisplayStringConversionWarning(dpy, (char *) fromVal->addr, XtRDimension); return False; @@ -1291,7 +1297,7 @@ Boolean XtCvtStringToUnsignedChar( if ( i < 0 || i > 255 ) XtDisplayStringConversionWarning(dpy, (char*)fromVal->addr, XtRUnsignedChar); - donestr(unsigned char, i, XtRUnsignedChar); + done_string(unsigned char, i, XtRUnsignedChar); } XtDisplayStringConversionWarning(dpy, (char*)fromVal->addr, XtRUnsignedChar); @@ -1433,11 +1439,11 @@ XtCvtStringToInitialState( "String to InitialState conversion needs no extra arguments", NULL, NULL); - if (CompareISOLatin1(str, "NormalState") == 0) donestr(int, NormalState, XtRInitialState); - if (CompareISOLatin1(str, "IconicState") == 0) donestr(int, IconicState, XtRInitialState); + if (CompareISOLatin1(str, "NormalState") == 0) done_string(int, NormalState, XtRInitialState); + if (CompareISOLatin1(str, "IconicState") == 0) done_string(int, IconicState, XtRInitialState); { int val; - if (IsInteger(str, &val)) donestr( int, val, XtRInitialState ); + if (IsInteger(str, &val)) done_string( int, val, XtRInitialState ); } XtDisplayStringConversionWarning(dpy, str, XtRInitialState); return False; @@ -1486,7 +1492,7 @@ Boolean XtCvtStringToVisual( (int)*(int*)args[1].addr, vc, &vinfo) ) { - donestr( Visual*, vinfo.visual, XtRVisual ); + done_string( Visual*, vinfo.visual, XtRVisual ); } else { String params[2]; @@ -1522,7 +1528,7 @@ Boolean XtCvtStringToAtom( } atom = XInternAtom( *(Display**)args->addr, (char*)fromVal->addr, False ); - donestr(Atom, atom, XtRAtom); + done_string(Atom, atom, XtRAtom); } /*ARGSUSED*/ @@ -1567,7 +1573,7 @@ Boolean XtCvtStringToDirectoryString( * The memory is freed when all cache references are released. */ str = XtNewString(str); - donestr(String, str, XtRDirectoryString); + done_string(String, str, XtRDirectoryString); } /*ARGSUSED*/ @@ -1604,13 +1610,13 @@ Boolean XtCvtStringToRestartStyle( NULL, NULL); if (CompareISOLatin1(str, "RestartIfRunning") == 0) - donestr(unsigned char, SmRestartIfRunning, XtRRestartStyle); + done_string(unsigned char, SmRestartIfRunning, XtRRestartStyle); if (CompareISOLatin1(str, "RestartAnyway") == 0) - donestr(unsigned char, SmRestartAnyway, XtRRestartStyle); + done_string(unsigned char, SmRestartAnyway, XtRRestartStyle); if (CompareISOLatin1(str, "RestartImmediately") == 0) - donestr(unsigned char, SmRestartImmediately, XtRRestartStyle); + done_string(unsigned char, SmRestartImmediately, XtRRestartStyle); if (CompareISOLatin1(str, "RestartNever") == 0) - donestr(unsigned char, SmRestartNever, XtRRestartStyle); + done_string(unsigned char, SmRestartNever, XtRRestartStyle); XtDisplayStringConversionWarning(dpy, str, XtRRestartStyle); return False; } @@ -1692,7 +1698,7 @@ Boolean XtCvtStringToCommandArgArray( *ptr = NULL; *closure_ret = (XtPointer) strarray; - donestr(char**, strarray, XtRCommandArgArray) + done_typed_string(String*, strarray, XtRCommandArgArray) } /*ARGSUSED*/ @@ -1773,7 +1779,7 @@ Boolean XtCvtStringToGravity ( CopyISOLatin1Lowered (lowerName, s); q = XrmStringToQuark (lowerName); for (np = names; np->name; np++) - if (np->quark == q) donestr(int, np->gravity, XtRGravity); + if (np->quark == q) done_string(int, np->gravity, XtRGravity); } XtDisplayStringConversionWarning(dpy, (char *)fromVal->addr, XtRGravity); return False; |