[Foxp][Test] simple echo test with custom payload size
[platform/upstream/dbus.git] / tools / dbus-send.c
index 81a9c37..2e37b08 100644 (file)
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  *
  */
 
 
 #include <dbus/dbus.h>
 
+#ifndef HAVE_STRTOLL
+#undef strtoll
+#define strtoll mystrtoll
+#include "strtoll.c"
+#endif
+
+#ifndef HAVE_STRTOULL
+#undef strtoull
+#define strtoull mystrtoull
+#include "strtoull.c"
+#endif
+
+#ifdef DBUS_WINCE
+#ifndef strdup
+#define strdup _strdup
+#endif
+#endif
+
 #include "dbus-print-message.h"
 
 static const char *appname;
@@ -33,7 +51,7 @@ static const char *appname;
 static void
 usage (int ecode)
 {
-  fprintf (stderr, "Usage: %s [--help] [--system | --session | --address=ADDRESS] [--dest=NAME] [--type=TYPE] [--print-reply=(literal)] [--reply-timeout=MSEC] <destination object path> <message name> [contents ...]\n", appname);
+  fprintf (stderr, "Usage: %s [--help] [--system | --session | --address=ADDRESS] [--dest=NAME] [--type=TYPE] [--print-reply[=literal]] [--reply-timeout=MSEC] <destination object path> <message name> [contents ...]\n", appname);
   exit (ecode);
 }
 
@@ -248,34 +266,52 @@ main (int argc, char *argv[])
          type = DBUS_BUS_SESSION;
           session_or_system = TRUE;
         }
-      else if (strstr (arg, "--address") == arg)
+      else if (strstr (arg, "--address=") == arg)
         {
-          address = strchr (arg, '=');
-
-          if (address == NULL) 
+          if (*(strchr (arg, '=') + 1) == '\0')
             {
               fprintf (stderr, "\"--address=\" requires an ADDRESS\n");
               usage (1);
             }
-          else
-            {
-              address = address + 1;
-            }
+          address = strchr (arg, '=') + 1;
         }
       else if (strncmp (arg, "--print-reply", 13) == 0)
        {
          print_reply = TRUE;
          message_type = DBUS_MESSAGE_TYPE_METHOD_CALL;
-         if (*(arg + 13) != '\0')
+         if (strcmp (arg + 13, "=literal") == 0)
            print_reply_literal = TRUE;
+         else if (*(arg + 13) != '\0')
+           {
+             fprintf (stderr, "invalid value (%s) of \"--print-reply\"\n", arg + 13);
+             usage (1);
+           }
        }
       else if (strstr (arg, "--reply-timeout=") == arg)
        {
+         if (*(strchr (arg, '=') + 1) == '\0')
+           {
+             fprintf (stderr, "\"--reply-timeout=\" requires an MSEC\n");
+             usage (1);
+           }
          reply_timeout = strtol (strchr (arg, '=') + 1,
                                  NULL, 10);
+         if (reply_timeout <= 0)
+           {
+             fprintf (stderr, "invalid value (%s) of \"--reply-timeout\"\n",
+                      strchr (arg, '=') + 1);
+             usage (1);
+           }
        }
       else if (strstr (arg, "--dest=") == arg)
-       dest = strchr (arg, '=') + 1;
+       {
+         if (*(strchr (arg, '=') + 1) == '\0')
+           {
+             fprintf (stderr, "\"--dest=\" requires an NAME\n");
+             usage (1);
+           }
+         dest = strchr (arg, '=') + 1;
+       }
       else if (strstr (arg, "--type=") == arg)
        type_str = strchr (arg, '=') + 1;
       else if (!strcmp(arg, "--help"))
@@ -284,10 +320,8 @@ main (int argc, char *argv[])
        usage (1);
       else if (path == NULL)
         path = arg;
-      else if (name == NULL)
+      else /* name == NULL guaranteed by the 'while' loop */
         name = arg;
-      else
-        usage (1);
     }
 
   if (name == NULL)
@@ -314,6 +348,12 @@ main (int argc, char *argv[])
   
   dbus_error_init (&error);
 
+  if (dest && !dbus_validate_bus_name (dest, &error))
+    {
+      fprintf (stderr, "invalid value (%s) of \"--dest\"\n", dest);
+      usage (1);
+    }
+
   if (address != NULL)
     {
       connection = dbus_connection_open (address, &error);