summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Johnson <mjj29@hecate.matthew.ath.cx>2008-05-31 20:20:54 +0100
committerMatthew Johnson <mjj29@hecate.matthew.ath.cx>2008-05-31 20:20:54 +0100
commit417244f5799811b08002ad6a11dd75e3aeaa425b (patch)
treeed87ac98927e9ce7af9d9410804e2038102ecec0
parent53ebc8b71b5e7eed4a573116fde12aabb8451213 (diff)
fixes
-rw-r--r--TODO1
-rw-r--r--changelog2
-rw-r--r--org/freedesktop/dbus/Transport.java2
-rw-r--r--org/freedesktop/dbus/bin/CreateInterface.java11
-rw-r--r--org/freedesktop/dbus/bin/DBusDaemon.java8
-rw-r--r--org/freedesktop/dbus/bin/IdentifierMangler.java43
-rw-r--r--translations/en_GB.po2
7 files changed, 62 insertions, 7 deletions
diff --git a/TODO b/TODO
index f64dcb9..d1c28fd 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1,3 @@
- ** Relicence to expat
** check that the blocking is correct on DBusAsyncReply and add an explicit timeout value
* document that you need to do connect; setup objects; get bus name for activation
* dbus 'patterns', like watching for disconnects of registered listeners
diff --git a/changelog b/changelog
index 2fa7750..96965fc 100644
--- a/changelog
+++ b/changelog
@@ -8,6 +8,8 @@ Version 2.4.1:
* Fix dynamic introspection of objects which export the same
interface multiple times (Patch from Sveinung Kvilhaugsvik
<sveinung84 -at- users -dot- sourceforge -dot- net>)
+ * Fix CreateInterface to mangle names which are reserved words
+ (Spotted by sveinung84 -at- users -dot- sourceforge -dot- net)
Version 2.4:
diff --git a/org/freedesktop/dbus/Transport.java b/org/freedesktop/dbus/Transport.java
index 3a43293..12f2f1a 100644
--- a/org/freedesktop/dbus/Transport.java
+++ b/org/freedesktop/dbus/Transport.java
@@ -272,6 +272,8 @@ public class Transport
top: while (true) {
int c = s.read();
switch (c) {
+ case -1:
+ throw new IOException("Stream unexpectedly short (broken pipe)");
case 0:
case '\r':
continue;
diff --git a/org/freedesktop/dbus/bin/CreateInterface.java b/org/freedesktop/dbus/bin/CreateInterface.java
index 314f992..73c5ea8 100644
--- a/org/freedesktop/dbus/bin/CreateInterface.java
+++ b/org/freedesktop/dbus/bin/CreateInterface.java
@@ -11,6 +11,7 @@
package org.freedesktop.dbus.bin;
import static org.freedesktop.dbus.Gettext._;
+import static org.freedesktop.dbus.bin.IdentifierMangler.mangle;
import java.io.File;
import java.io.FileInputStream;
@@ -155,7 +156,7 @@ public class CreateInterface
Vector<Element> out = new Vector<Element>();
if (null == meth.getAttribute("name") ||
"".equals(meth.getAttribute("name"))) {
- System.err.println(_("ERROR: Interface name was blank, failed"));
+ System.err.println(_("ERROR: Method name was blank, failed"));
System.exit(1);
}
String annotations = "";
@@ -193,7 +194,7 @@ public class CreateInterface
comment = "";
sig += parseReturns(out, imports, tuples, structs);
- sig += meth.getAttribute("name")+"(";
+ sig += mangle(meth.getAttribute("name"))+"(";
char defaultname = 'a';
String params = "";
@@ -201,7 +202,7 @@ public class CreateInterface
String type = getJavaType(arg.getAttribute("type"), imports, structs, false, false);
String name = arg.getAttribute("name");
if (null == name || "".equals(name)) name = ""+(defaultname++);
- params += type+" "+name+", ";
+ params += type+" "+mangle(name)+", ";
}
return ("".equals(comment) ? "" : " /**\n" + comment + " */\n")
+ annotations + " public " + sig +
@@ -229,8 +230,8 @@ public class CreateInterface
String type = getJavaType(arg.getAttribute("type"), imports, structs, false, false);
String name = arg.getAttribute("name");
if (null == name || "".equals(name)) name = ""+(defaultname++);
- params.put(name, type);
- porder.add(name);
+ params.put(mangle(name), type);
+ porder.add(mangle(name));
}
}
diff --git a/org/freedesktop/dbus/bin/DBusDaemon.java b/org/freedesktop/dbus/bin/DBusDaemon.java
index 97444fa..5147a72 100644
--- a/org/freedesktop/dbus/bin/DBusDaemon.java
+++ b/org/freedesktop/dbus/bin/DBusDaemon.java
@@ -838,7 +838,13 @@ public class DBusDaemon extends Thread
// accept new connections
while (d._run) {
Socket s = ss.accept();
- if ((new Transport.SASL()).auth(Transport.SASL.MODE_SERVER, Transport.SASL.AUTH_EXTERNAL, address.getParameter("guid"), s.getOutputStream(), s.getInputStream(), null)) {
+ boolean authOK=false;
+ try {
+ authOK = (new Transport.SASL()).auth(Transport.SASL.MODE_SERVER, Transport.SASL.AUTH_EXTERNAL, address.getParameter("guid"), s.getOutputStream(), s.getInputStream(), null);
+ } catch (Exception e) {
+ if (Debug.debug) Debug. print(Debug.DEBUG, e);
+ }
+ if (authOK) {
d.addSock(s);
} else
s.close();
diff --git a/org/freedesktop/dbus/bin/IdentifierMangler.java b/org/freedesktop/dbus/bin/IdentifierMangler.java
new file mode 100644
index 0000000..0ccf60b
--- /dev/null
+++ b/org/freedesktop/dbus/bin/IdentifierMangler.java
@@ -0,0 +1,43 @@
+/*
+ D-Bus Java Implementation
+ Copyright (c) 2005-2006 Matthew Johnson
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of either the GNU General Public License Version 2 or the
+ Academic Free Licence Version 2.1.
+
+ Full licence texts are included in the COPYING file with this program.
+*/
+package org.freedesktop.dbus.bin;
+
+import java.util.Arrays;
+
+/**
+ * Checks identifiers for keywords etc and mangles them if so.
+ */
+public class IdentifierMangler
+{
+ private static String[] keywords;
+ static {
+ keywords = new String[] {
+ "true","false","null",
+ "abstract","continue","for","new","switch",
+ "assert","default","goto","package","synchronized",
+ "boolean","do","if","private","this",
+ "break","double","implements","protected","throw",
+ "byte","else","import","public","throws",
+ "case","enum","instanceof","return","transient",
+ "catch","extends","int","short","try",
+ "char","final","interface","static","void",
+ "class","finally","long","strictfp","volatile",
+ "const","float","native","super","while"
+ };
+ Arrays.sort(keywords);
+ }
+ public static String mangle(String name)
+ {
+ if (Arrays.binarySearch(keywords, name) >= 0)
+ name = "_"+name;
+ return name;
+ }
+}
diff --git a/translations/en_GB.po b/translations/en_GB.po
index 19eabd4..459c0fe 100644
--- a/translations/en_GB.po
+++ b/translations/en_GB.po
@@ -57,6 +57,8 @@ msgid "ERROR: Failure in DBus Communications: "
msgstr "ERROR: Failure in DBus Communications: "
msgid "ERROR: Interface name was blank, failed"
msgstr "ERROR: Interface name was blank, failed"
+msgid "ERROR: Method name was blank, failed"
+msgstr "ERROR: Method name was blank, failed"
msgid "ERROR: Unknown node: "
msgstr "ERROR: Unknown node: "
msgid "ERROR: Unknown option: "