summaryrefslogtreecommitdiff
path: root/src/StrToLong.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/StrToLong.c')
-rw-r--r--src/StrToLong.c61
1 files changed, 44 insertions, 17 deletions
diff --git a/src/StrToLong.c b/src/StrToLong.c
index bb39466..0eaf793 100644
--- a/src/StrToLong.c
+++ b/src/StrToLong.c
@@ -25,29 +25,56 @@ used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from The Open Group.
*/
+/* $XFree86: xc/lib/Xmu/StrToLong.c,v 1.9 2001/12/14 19:55:52 dawes Exp $ */
-
+#include <stdio.h>
#include <X11/Intrinsic.h>
-#include "Converters.h"
-
-#define done(address, type) \
- { (*toVal).size = sizeof(type); (*toVal).addr = (XPointer) address; }
+#include <X11/Xmu/SysUtil.h>
+#include <X11/Xmu/Converters.h>
-void XmuCvtStringToLong (args, num_args, fromVal, toVal)
- XrmValuePtr args;
- Cardinal *num_args;
- XrmValuePtr fromVal;
- XrmValuePtr toVal;
+void
+XmuCvtStringToLong(XrmValuePtr args, Cardinal *num_args,
+ XrmValuePtr fromVal, XrmValuePtr toVal)
{
static long l;
if (*num_args != 0)
- XtWarningMsg("wrongParameters","cvtStringToLong","XtToolkitError",
- "String to Long conversion needs no extra arguments",
- (String *) NULL, (Cardinal *)NULL);
- if (sscanf((char *)fromVal->addr, "%ld", &l) == 1) {
- done(&l, long);
- } else {
- XtStringConversionWarning((char *) fromVal->addr, XtRLong);
+ XtWarning("String to Long conversion needs no extra arguments");
+ if (sscanf((char *)fromVal->addr, "%ld", &l) == 1)
+ {
+ toVal->size = sizeof(long);
+ toVal->addr = (XPointer)&l;
}
+ else
+ XtStringConversionWarning((char *)fromVal->addr, XtRLong);
+}
+
+/*ARGSUSED*/
+Boolean
+XmuCvtLongToString(Display *dpy, XrmValuePtr args, Cardinal *num_args,
+ XrmValuePtr fromVal, XrmValuePtr toVal, XtPointer *data)
+{
+ static char buffer[32];
+ size_t size;
+
+ if (*num_args != 0)
+ XtWarning("Long to String conversion needs no extra arguments");
+
+ XmuSnprintf(buffer, sizeof(buffer), "%ld", *(long *)fromVal->addr);
+
+ size = strlen(buffer) + 1;
+ if (toVal->addr != NULL)
+ {
+ if (toVal->size < size)
+ {
+ toVal->size = size;
+ return (False);
+ }
+ strcpy((char *)toVal->addr, buffer);
+ }
+ else
+ toVal->addr = (XPointer)buffer;
+ toVal->size = sizeof(String);
+
+ return (True);
}