Decode/Encode: immer mit to*() arbeiten.

Unterscheidung nach RESTRICTED_CASTS entfernt und stattdessen
immer mit den to_*() efuns arbeiten.
Ausserdem die Erkennung von Strings mit nur Digits drin
umgebaut.

Change-Id: I33ecf3e1cfef11987ed427dad0052209749d7eba
diff --git a/secure/inetd.c b/secure/inetd.c
index d015602..921a41e 100644
--- a/secure/inetd.c
+++ b/secure/inetd.c
@@ -263,17 +263,13 @@
  * Decode a string from a UDP packet.
  * Returns:   The actual value of the argument (either int or string)
  */
-mixed decode(string arg) {
-
+string|int decode(string arg)
+{
     if (sizeof(arg) && arg[0] == '$')
         return arg[1..];
-#ifdef RESTRICTED_CASTS
-    if (to_string(to_int(arg)) == arg)
+    else if ((arg & "0123456789") == arg)
         return to_int(arg);
-#else
-    if ((string)((int)arg) == arg)
-        return (int)arg;
-#endif
+
     return arg;
 }
 
@@ -569,17 +565,21 @@
 #endif
 
 string encode(mixed arg) {
+    // Objektnamen mit nicht-ASCII hier ist in allen Faellen doof, wenn sie
+    // koennen auch mit Transliteration nicht mehr verlustfrei zurueck
+    // konvertiert werden...
     if (objectp(arg))
-        return object_name(arg);
-    if (stringp(arg) && sizeof(arg) &&
-        (arg[0] == '$' ||
-#ifdef RESTRICTED_CASTS
-    to_string(to_int(arg)) == (string)arg))
-#else
-    (string)to_int(arg) == (string)arg))
-#endif
-        return "$" + arg;
-    return to_string(arg);
+        arg = object_name(arg);
+    else if (!stringp(arg))
+        arg = to_string(arg);
+
+    // faengt es mit $ an oder ist es ne zahl (als string, d.h. enthaelt nur
+    // 0-9)? Dann muss nen $ davor.
+    // TODO: Mhmm. Oder vielleicht doch per RegExp?
+    if ( (arg[0] == '$') || ((arg & "0123456789") == arg))
+        arg = '$' + arg;
+
+    return arg;
 }
 
 string encode_packet(mapping data) {