{
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)
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;
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;
const DBusString *filename)
{
DBusString file;
- DBusResultCode result;
+ DBusError error;
DBusString line;
dbus_bool_t retval;
int line_no;
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;
}
"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"))
{
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;
}
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;
}
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);
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;
}
}
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)
{