2003-03-31 Havoc Pennington <hp@redhat.com>
[platform/upstream/dbus.git] / dbus / dbus-message-builder.c
index dea50d7..044c2a7 100644 (file)
@@ -67,8 +67,8 @@ ensure_saved_length (DBusHashTable    *hash,
 {
   SavedLength *sl;
   const char *s;
-
-  _dbus_string_get_const_data (name, &s);
+  
+  s = _dbus_string_get_const_data (name);
 
   sl = _dbus_hash_table_lookup_string (hash, s);
   if (sl != NULL)
@@ -76,7 +76,7 @@ ensure_saved_length (DBusHashTable    *hash,
   
   sl = dbus_new0 (SavedLength, 1);
 
-  if (!_dbus_string_init (&sl->name, _DBUS_INT_MAX))
+  if (!_dbus_string_init (&sl->name))
     {
       dbus_free (sl);
       return NULL;
@@ -85,7 +85,7 @@ ensure_saved_length (DBusHashTable    *hash,
   if (!_dbus_string_copy (name, 0, &sl->name, 0))
     goto failed;
 
-  _dbus_string_get_const_data (&sl->name, &s);
+  s = _dbus_string_get_const_data (&sl->name);
 
   if (!_dbus_hash_table_insert_string (hash, (char*)s, sl))
     goto failed;
@@ -314,7 +314,7 @@ _dbus_message_data_load (DBusString       *dest,
                          const DBusString *filename)
 {
   DBusString file;
-  DBusResultCode result;
+  DBusError error;
   DBusString line;
   dbus_bool_t retval;
   int line_no;
@@ -326,22 +326,23 @@ _dbus_message_data_load (DBusString       *dest,
   retval = FALSE;
   length_hash = NULL;
   
-  if (!_dbus_string_init (&file, _DBUS_INT_MAX))
+  if (!_dbus_string_init (&file))
     return FALSE;
 
-  if (!_dbus_string_init (&line, _DBUS_INT_MAX))
+  if (!_dbus_string_init (&line))
     {
       _dbus_string_free (&file);
       return FALSE;
     }
-  
-  if ((result = _dbus_file_get_contents (&file, filename)) != DBUS_RESULT_SUCCESS)
+
+  _dbus_verbose ("Loading %s\n", _dbus_string_get_const_data (filename));
+
+  dbus_error_init (&error);
+  if (!_dbus_file_get_contents (&file, filename, &error))
     {
-      const char *s;
-      _dbus_string_get_const_data (filename, &s);
       _dbus_warn ("Getting contents of %s failed: %s\n",
-                  s, dbus_result_to_string (result));
-                     
+                  _dbus_string_get_const_data (filename), error.message);
+      dbus_error_free (&error);
       goto out;
     }
 
@@ -439,24 +440,47 @@ _dbus_message_data_load (DBusString       *dest,
                                                "ALIGN"))
         {
           long val;
-
+          int end;
+          int orig_len;
+          
           _dbus_string_delete_first_word (&line);
 
-          if (!_dbus_string_parse_int (&line, 0, &val, NULL))
+          if (!_dbus_string_parse_int (&line, 0, &val, &end))
             {
               _dbus_warn ("Failed to parse integer\n");
               goto parse_failed;
             }
 
-          if (val > 16)
+          if (val > 8)
             {
               _dbus_warn ("Aligning to %ld boundary is crack\n",
                           val);
               goto parse_failed;
             }
+
+          orig_len = _dbus_string_get_length (dest);
           
           if (!_dbus_string_align_length (dest, val))
             goto parse_failed;
+
+          if (_dbus_string_parse_int (&line, end, &val, NULL))
+            {
+              /* If there's an optional second int argument,
+               * fill in align padding with that value
+               */
+              if (val < 0 || val > 255)
+                {
+                  _dbus_warn ("can't fill align padding with %ld, must be a byte value\n", val);
+                  goto parse_failed;
+                }
+
+              end = orig_len;
+              while (end < _dbus_string_get_length (dest))
+                {
+                  _dbus_string_set_byte (dest, end, val);
+                  ++end;
+                }
+            }
         }
       else if (_dbus_string_starts_with_c_str (&line, "UNALIGN"))
         {
@@ -570,10 +594,8 @@ _dbus_message_data_load (DBusString       *dest,
 
           if (_dbus_string_get_length (&line) != 4)
             {
-              const char *s;
-              _dbus_string_get_const_data (&line, &s);
               _dbus_warn ("Field name must be four characters not \"%s\"\n",
-                             s);
+                          _dbus_string_get_const_data (&line));
               goto parse_failed;
             }
 
@@ -619,11 +641,11 @@ _dbus_message_data_load (DBusString       *dest,
             code = DBUS_TYPE_DOUBLE;
           else if (_dbus_string_starts_with_c_str (&line, "STRING"))
             code = DBUS_TYPE_STRING;
+          else if (_dbus_string_starts_with_c_str (&line, "DICT"))
+            code = DBUS_TYPE_DICT;
           else
             {
-              const char *s;
-              _dbus_string_get_const_data (&line, &s);
-              _dbus_warn ("%s is not a valid type name\n", s);
+              _dbus_warn ("%s is not a valid type name\n", _dbus_string_get_const_data (&line));
               goto parse_failed;
             }
 
@@ -940,7 +962,7 @@ _dbus_message_data_load (DBusString       *dest,
          if (b != '{')
            goto parse_failed;
 
-         _dbus_string_init (&val_str, _DBUS_INT_MAX);
+         _dbus_string_init (&val_str);
          while (i < _dbus_string_get_length (&line))
            {
              _dbus_string_skip_blank (&line, i, &i);
@@ -1125,10 +1147,8 @@ _dbus_message_data_load (DBusString       *dest,
       
     parse_failed:
       {
-        const char *s;
-        _dbus_string_get_const_data (&line, &s);
         _dbus_warn ("couldn't process line %d \"%s\"\n",
-                    line_no, s);
+                    line_no, _dbus_string_get_const_data (&line));
         goto out;
       }
     }
@@ -1139,7 +1159,7 @@ _dbus_message_data_load (DBusString       *dest,
       SavedLength *sl = _dbus_hash_iter_get_value (&iter);
       const char *s;
 
-      _dbus_string_get_const_data (&sl->name, &s);
+      s = _dbus_string_get_const_data (&sl->name);
       
       if (sl->length < 0)
         {