Control: tags -1 patch Hi Scott,
On Sun, Oct 27, 2013 at 10:23:20AM -0700, Steve Langasek wrote: > You've recently merged a patch to the libnih github repo to allow passing of > empty arrays to dbus calls (commit 163a2e). Could you please include this > patch in the package in Debian soon (new upstream release, cherry-pick, > whatever works for you)? This currently blocks us from getting a newer > upstream version of upstart into Debian, since later releases of upstart > rely on this functionality. > I would be more than happy to NMU this change in if you're ok with that and > don't have time to get to it right now. Or if you don't want an NMU, and > aren't going to get to this in the near future, please let me know that so I > can do cherry-picks of my own in upstart to work around bug #722572, which > is fixed in newer upstream versions. In the absence of any guidance on this issue, I have prepared an NMU of libnih to cherry-pick the change in question and am uploading it to the DELAYED/10-day queue. Please find the debdiff attached. Thanks, -- Steve Langasek Give me a lever long enough and a Free OS Debian Developer to set it on, and I can move the world. Ubuntu Developer http://www.debian.org/ slanga...@ubuntu.com vor...@debian.org
diff -Nru libnih-1.0.3/debian/changelog libnih-1.0.3/debian/changelog --- libnih-1.0.3/debian/changelog 2012-12-31 09:32:22.000000000 -0800 +++ libnih-1.0.3/debian/changelog 2013-11-11 00:23:00.000000000 -0800 @@ -1,3 +1,11 @@ +libnih (1.0.3-4.2) unstable; urgency=low + + * Non-maintainer upload. + * Cherry-pick from upstream: update dbus code generator to allow for empty + lists for type 'as'. Closes: #728036. + + -- Steve Langasek <vor...@debian.org> Mon, 11 Nov 2013 07:37:27 +0000 + libnih (1.0.3-4.1) unstable; urgency=low * Non-maintainer Upload. diff -Nru libnih-1.0.3/debian/patches/0001-Update-dbus-code-generator-to-allow-for-empty-lists-.patch libnih-1.0.3/debian/patches/0001-Update-dbus-code-generator-to-allow-for-empty-lists-.patch --- libnih-1.0.3/debian/patches/0001-Update-dbus-code-generator-to-allow-for-empty-lists-.patch 1969-12-31 16:00:00.000000000 -0800 +++ libnih-1.0.3/debian/patches/0001-Update-dbus-code-generator-to-allow-for-empty-lists-.patch 2013-11-10 23:37:11.000000000 -0800 @@ -0,0 +1,634 @@ +Author: Stéphane Graber <stgra...@ubuntu.com>, Steve Langasek <steve.langa...@canonical.com> +Description: Update dbus code generator to allow for empty lists for type 'as' + This drops the != NULL check for NULL terminated arrays and moves the + iteration loop inside an 'if' statement. + +Index: libnih-1.0.3/nih-dbus-tool/marshal.c +=================================================================== +--- libnih-1.0.3.orig/nih-dbus-tool/marshal.c ++++ libnih-1.0.3/nih-dbus-tool/marshal.c +@@ -364,6 +364,7 @@ + nih_local TypeVar *element_len_var = NULL; + nih_local char * block = NULL; + nih_local char * vars_block = NULL; ++ nih_local char * loop_block = NULL; + + nih_assert (iter != NULL); + nih_assert (iter_name != NULL); +@@ -448,7 +449,7 @@ + nih_list_add (locals, &array_iter_var->entry); + + if (dbus_type_is_fixed (element_type)) { +- if (! nih_strcat_sprintf (&code, parent, ++ if (! nih_strcat_sprintf (&loop_block, parent, + "for (size_t %s = 0; %s < %s; %s++) {\n", + loop_name, loop_name, len_name, loop_name)) { + nih_free (code); +@@ -456,6 +457,12 @@ + } + } else { + if (! nih_strcat_sprintf (&code, parent, ++ "if (%s) {\n", ++ name)) { ++ nih_free (code); ++ return NULL; ++ } ++ if (! nih_strcat_sprintf (&loop_block, parent, + "for (size_t %s = 0; %s[%s]; %s++) {\n", + loop_name, name, loop_name, loop_name)) { + nih_free (code); +@@ -576,7 +583,7 @@ + } + + +- if (! nih_strcat_sprintf (&code, parent, ++ if (! nih_strcat_sprintf (&loop_block, parent, + "%s" + "\n" + "%s" +@@ -590,9 +597,34 @@ + } + + /* Close the container again */ ++ if (! nih_strcat_sprintf (&loop_block, parent, ++ "}\n")) { ++ nih_free (code); ++ return NULL; ++ } ++ ++ if (dbus_type_is_fixed (element_type)) { ++ if (! nih_strcat_sprintf (&code, parent, ++ "%s\n", loop_block)) { ++ nih_free (code); ++ return NULL; ++ } ++ } ++ else { ++ if (! indent (&loop_block, NULL, 1)) { ++ nih_free (code); ++ return NULL; ++ } ++ ++ if (! nih_strcat_sprintf (&code, parent, ++ "%s" ++ "}\n\n", loop_block)) { ++ nih_free (code); ++ return NULL; ++ } ++ } ++ + if (! nih_strcat_sprintf (&code, parent, +- "}\n" +- "\n" + "if (! dbus_message_iter_close_container (&%s, &%s)) {\n" + "%s" + "}\n", +Index: libnih-1.0.3/nih-dbus-tool/tests/expected/test_method_object_function_no_input.c +=================================================================== +--- libnih-1.0.3.orig/nih-dbus-tool/tests/expected/test_method_object_function_no_input.c ++++ libnih-1.0.3/nih-dbus-tool/tests/expected/test_method_object_function_no_input.c +@@ -88,17 +88,19 @@ + goto enomem; + } + +- for (size_t output_i = 0; output[output_i]; output_i++) { +- const char *output_element; ++ if (output) { ++ for (size_t output_i = 0; output[output_i]; output_i++) { ++ const char *output_element; + +- output_element = output[output_i]; ++ output_element = output[output_i]; + +- /* Marshal a char * onto the message */ +- if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) { +- dbus_message_iter_abandon_container (&iter, &output_iter); +- dbus_message_unref (reply); +- reply = NULL; +- goto enomem; ++ /* Marshal a char * onto the message */ ++ if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) { ++ dbus_message_iter_abandon_container (&iter, &output_iter); ++ dbus_message_unref (reply); ++ reply = NULL; ++ goto enomem; ++ } + } + } + +Index: libnih-1.0.3/nih-dbus-tool/tests/expected/test_method_object_function_standard.c +=================================================================== +--- libnih-1.0.3.orig/nih-dbus-tool/tests/expected/test_method_object_function_standard.c ++++ libnih-1.0.3/nih-dbus-tool/tests/expected/test_method_object_function_standard.c +@@ -136,17 +136,19 @@ + goto enomem; + } + +- for (size_t output_i = 0; output[output_i]; output_i++) { +- const char *output_element; ++ if (output) { ++ for (size_t output_i = 0; output[output_i]; output_i++) { ++ const char *output_element; + +- output_element = output[output_i]; ++ output_element = output[output_i]; + +- /* Marshal a char * onto the message */ +- if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) { +- dbus_message_iter_abandon_container (&iter, &output_iter); +- dbus_message_unref (reply); +- reply = NULL; +- goto enomem; ++ /* Marshal a char * onto the message */ ++ if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) { ++ dbus_message_iter_abandon_container (&iter, &output_iter); ++ dbus_message_unref (reply); ++ reply = NULL; ++ goto enomem; ++ } + } + } + +Index: libnih-1.0.3/nih-dbus-tool/tests/expected/test_method_reply_function_deprecated.c +=================================================================== +--- libnih-1.0.3.orig/nih-dbus-tool/tests/expected/test_method_reply_function_deprecated.c ++++ libnih-1.0.3/nih-dbus-tool/tests/expected/test_method_reply_function_deprecated.c +@@ -7,7 +7,6 @@ + DBusMessageIter output_iter; + + nih_assert (message != NULL); +- nih_assert (output != NULL); + + /* If the sender doesn't care about a reply, don't bother wasting + * effort constructing and sending one. +@@ -28,16 +27,18 @@ + return -1; + } + +- for (size_t output_i = 0; output[output_i]; output_i++) { +- const char *output_element; +- +- output_element = output[output_i]; +- +- /* Marshal a char * onto the message */ +- if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) { +- dbus_message_iter_abandon_container (&iter, &output_iter); +- dbus_message_unref (reply); +- return -1; ++ if (output) { ++ for (size_t output_i = 0; output[output_i]; output_i++) { ++ const char *output_element; ++ ++ output_element = output[output_i]; ++ ++ /* Marshal a char * onto the message */ ++ if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) { ++ dbus_message_iter_abandon_container (&iter, &output_iter); ++ dbus_message_unref (reply); ++ return -1; ++ } + } + } + +Index: libnih-1.0.3/nih-dbus-tool/tests/expected/test_method_reply_function_standard.c +=================================================================== +--- libnih-1.0.3.orig/nih-dbus-tool/tests/expected/test_method_reply_function_standard.c ++++ libnih-1.0.3/nih-dbus-tool/tests/expected/test_method_reply_function_standard.c +@@ -7,7 +7,6 @@ + DBusMessageIter output_iter; + + nih_assert (message != NULL); +- nih_assert (output != NULL); + + /* If the sender doesn't care about a reply, don't bother wasting + * effort constructing and sending one. +@@ -28,16 +27,18 @@ + return -1; + } + +- for (size_t output_i = 0; output[output_i]; output_i++) { +- const char *output_element; +- +- output_element = output[output_i]; +- +- /* Marshal a char * onto the message */ +- if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) { +- dbus_message_iter_abandon_container (&iter, &output_iter); +- dbus_message_unref (reply); +- return -1; ++ if (output) { ++ for (size_t output_i = 0; output[output_i]; output_i++) { ++ const char *output_element; ++ ++ output_element = output[output_i]; ++ ++ /* Marshal a char * onto the message */ ++ if (! dbus_message_iter_append_basic (&output_iter, DBUS_TYPE_STRING, &output_element)) { ++ dbus_message_iter_abandon_container (&iter, &output_iter); ++ dbus_message_unref (reply); ++ return -1; ++ } + } + } + +Index: libnih-1.0.3/nih-dbus-tool/tests/test_com.netsplit.Nih.Test_object.c +=================================================================== +--- libnih-1.0.3.orig/nih-dbus-tool/tests/test_com.netsplit.Nih.Test_object.c ++++ libnih-1.0.3/nih-dbus-tool/tests/test_com.netsplit.Nih.Test_object.c +@@ -14185,6 +14185,57 @@ + } + + ++ /* Check that we can pass a NULL pointer for the array. ++ */ ++ TEST_FEATURE ("with NULL array pointer"); ++ TEST_ALLOC_FAIL { ++ dbus_error_init (&dbus_error); ++ dbus_bus_add_match (client_conn, "type='signal'", &dbus_error); ++ assert (! dbus_error_is_set (&dbus_error)); ++ dbus_error_free (&dbus_error); ++ ++ ret = my_test_emit_new_str_array (server_conn, ++ "/com/netsplit/Nih/Test", ++ NULL); ++ ++ if (test_alloc_failed) { ++ TEST_LT (ret, 0); ++ ++ dbus_error_init (&dbus_error); ++ dbus_bus_remove_match (client_conn, "type='signal'", ++ &dbus_error); ++ assert (! dbus_error_is_set (&dbus_error)); ++ dbus_error_free (&dbus_error); ++ ++ continue; ++ } ++ ++ dbus_connection_flush (server_conn); ++ ++ TEST_DBUS_MESSAGE (client_conn, signal); ++ TEST_TRUE (dbus_message_is_signal ( ++ signal, "com.netsplit.Nih.Test", "NewStrArray")); ++ TEST_EQ_STR (dbus_message_get_signature (signal), ++ (DBUS_TYPE_ARRAY_AS_STRING ++ DBUS_TYPE_STRING_AS_STRING)); ++ ++ dbus_message_iter_init (signal, &iter); ++ ++ dbus_message_iter_recurse (&iter, &subiter); ++ ++ TEST_EQ (dbus_message_iter_get_arg_type (&subiter), ++ DBUS_TYPE_INVALID); ++ ++ dbus_message_unref (signal); ++ ++ dbus_error_init (&dbus_error); ++ dbus_bus_remove_match (client_conn, "type='signal'", ++ &dbus_error); ++ assert (! dbus_error_is_set (&dbus_error)); ++ dbus_error_free (&dbus_error); ++ } ++ ++ + /* Check that we can give an empty array consisting of just the + * NULL pointer. + */ +Index: libnih-1.0.3/nih-dbus-tool/tests/test_marshal.c +=================================================================== +--- libnih-1.0.3.orig/nih-dbus-tool/tests/test_marshal.c ++++ libnih-1.0.3/nih-dbus-tool/tests/test_marshal.c +@@ -1479,39 +1479,41 @@ + "\treturn -1;\n" + "}\n" + "\n" +- "for (size_t value_i = 0; value[value_i]; value_i++) {\n" +- "\tDBusMessageIter value_element_iter;\n" +- "\tconst int16_t * value_element;\n" +- "\tsize_t value_element_len;\n" ++ "if (value) {\n" ++ "\tfor (size_t value_i = 0; value[value_i]; value_i++) {\n" ++ "\t\tDBusMessageIter value_element_iter;\n" ++ "\t\tconst int16_t * value_element;\n" ++ "\t\tsize_t value_element_len;\n" + "\n" +- "\tvalue_element = value[value_i];\n" +- "\tvalue_element_len = value_len[value_i];\n" ++ "\t\tvalue_element = value[value_i];\n" ++ "\t\tvalue_element_len = value_len[value_i];\n" + "\n" + +- "\t/* Marshal an array onto the message */\n" +- "\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_ARRAY, \"n\", &value_element_iter)) {\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" +- "\t}\n" ++ "\t\t/* Marshal an array onto the message */\n" ++ "\t\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_ARRAY, \"n\", &value_element_iter)) {\n" ++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\treturn -1;\n" ++ "\t\t}\n" + "\n" +- "\tfor (size_t value_element_i = 0; value_element_i < value_element_len; value_element_i++) {\n" +- "\t\tint16_t value_element_element;\n" ++ "\t\tfor (size_t value_element_i = 0; value_element_i < value_element_len; value_element_i++) {\n" ++ "\t\t\tint16_t value_element_element;\n" + "\n" +- "\t\tvalue_element_element = value_element[value_element_i];\n" ++ "\t\t\tvalue_element_element = value_element[value_element_i];\n" + "\n" +- "\t\t/* Marshal a int16_t onto the message */\n" +- "\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_INT16, &value_element_element)) {\n" +- "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n" ++ "\t\t\t/* Marshal a int16_t onto the message */\n" ++ "\t\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_INT16, &value_element_element)) {\n" ++ "\t\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n" ++ "\t\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\t\treturn -1;\n" ++ "\t\t\t}\n" ++ "\t\t}\n" ++ "\n" ++ "\t\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n" + "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" + "\t\t\treturn -1;\n" + "\t\t}\n" +- "\t}\n" +- "\n" +- "\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" +- "\t}\n" + ++ "\t}\n" + "}\n" + "\n" + "if (! dbus_message_iter_close_container (&iter, &value_iter)) {\n" +@@ -1766,15 +1768,17 @@ + "\treturn -1;\n" + "}\n" + "\n" +- "for (size_t value_i = 0; value[value_i]; value_i++) {\n" +- "\tconst char *value_element;\n" ++ "if (value) {\n" ++ "\tfor (size_t value_i = 0; value[value_i]; value_i++) {\n" ++ "\t\tconst char *value_element;\n" + "\n" +- "\tvalue_element = value[value_i];\n" ++ "\t\tvalue_element = value[value_i];\n" + "\n" +- "\t/* Marshal a char * onto the message */\n" +- "\tif (! dbus_message_iter_append_basic (&value_iter, DBUS_TYPE_STRING, &value_element)) {\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" ++ "\t\t/* Marshal a char * onto the message */\n" ++ "\t\tif (! dbus_message_iter_append_basic (&value_iter, DBUS_TYPE_STRING, &value_element)) {\n" ++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\treturn -1;\n" ++ "\t\t}\n" + "\t}\n" + "}\n" + "\n" +@@ -1933,35 +1937,39 @@ + "\treturn -1;\n" + "}\n" + "\n" +- "for (size_t value_i = 0; value[value_i]; value_i++) {\n" +- "\tDBusMessageIter value_element_iter;\n" +- "\tchar * const * value_element;\n" ++ "if (value) {\n" ++ "\tfor (size_t value_i = 0; value[value_i]; value_i++) {\n" ++ "\t\tDBusMessageIter value_element_iter;\n" ++ "\t\tchar * const * value_element;\n" + "\n" +- "\tvalue_element = value[value_i];\n" ++ "\t\tvalue_element = value[value_i];\n" + "\n" +- "\t/* Marshal an array onto the message */\n" +- "\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_ARRAY, \"s\", &value_element_iter)) {\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" +- "\t}\n" +- "\n" +- "\tfor (size_t value_element_i = 0; value_element[value_element_i]; value_element_i++) {\n" +- "\t\tconst char *value_element_element;\n" ++ "\t\t/* Marshal an array onto the message */\n" ++ "\t\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_ARRAY, \"s\", &value_element_iter)) {\n" ++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\treturn -1;\n" ++ "\t\t}\n" + "\n" +- "\t\tvalue_element_element = value_element[value_element_i];\n" ++ "\t\tif (value_element) {\n" ++ "\t\t\tfor (size_t value_element_i = 0; value_element[value_element_i]; value_element_i++) {\n" ++ "\t\t\t\tconst char *value_element_element;\n" ++ "\n" ++ "\t\t\t\tvalue_element_element = value_element[value_element_i];\n" ++ "\n" ++ "\t\t\t\t/* Marshal a char * onto the message */\n" ++ "\t\t\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_STRING, &value_element_element)) {\n" ++ "\t\t\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n" ++ "\t\t\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\t\t\treturn -1;\n" ++ "\t\t\t\t}\n" ++ "\t\t\t}\n" ++ "\t\t}\n" + "\n" +- "\t\t/* Marshal a char * onto the message */\n" +- "\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_STRING, &value_element_element)) {\n" +- "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n" ++ "\t\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n" + "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" + "\t\t\treturn -1;\n" + "\t\t}\n" + "\t}\n" +- "\n" +- "\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" +- "\t}\n" + "}\n" + "\n" + "if (! dbus_message_iter_close_container (&iter, &value_iter)) {\n" +@@ -2194,16 +2202,18 @@ + "\treturn -1;\n" + "}\n" + "\n" +- "for (size_t value_item2_i = 0; value_item2[value_item2_i]; value_item2_i++) {\n" +- "\tconst char *value_item2_element;\n" ++ "if (value_item2) {\n" ++ "\tfor (size_t value_item2_i = 0; value_item2[value_item2_i]; value_item2_i++) {\n" ++ "\t\tconst char *value_item2_element;\n" + "\n" +- "\tvalue_item2_element = value_item2[value_item2_i];\n" ++ "\t\tvalue_item2_element = value_item2[value_item2_i];\n" + "\n" +- "\t/* Marshal a char * onto the message */\n" +- "\tif (! dbus_message_iter_append_basic (&value_item2_iter, DBUS_TYPE_STRING, &value_item2_element)) {\n" +- "\t\tdbus_message_iter_abandon_container (&value_iter, &value_item2_iter);\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" ++ "\t\t/* Marshal a char * onto the message */\n" ++ "\t\tif (! dbus_message_iter_append_basic (&value_item2_iter, DBUS_TYPE_STRING, &value_item2_element)) {\n" ++ "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_item2_iter);\n" ++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\treturn -1;\n" ++ "\t\t}\n" + "\t}\n" + "}\n" + "\n" +@@ -2642,41 +2652,43 @@ + "\treturn -1;\n" + "}\n" + "\n" +- "for (size_t value_i = 0; value[value_i]; value_i++) {\n" +- "\tDBusMessageIter value_element_iter;\n" +- "\tconst char * value_element_item0;\n" +- "\tuint32_t value_element_item1;\n" +- "\tconst MyStructArrayValueElement *value_element;\n" ++ "if (value) {\n" ++ "\tfor (size_t value_i = 0; value[value_i]; value_i++) {\n" ++ "\t\tDBusMessageIter value_element_iter;\n" ++ "\t\tconst char * value_element_item0;\n" ++ "\t\tuint32_t value_element_item1;\n" ++ "\t\tconst MyStructArrayValueElement *value_element;\n" + "\n" +- "\tvalue_element = value[value_i];\n" ++ "\t\tvalue_element = value[value_i];\n" + "\n" +- "\t/* Marshal a structure onto the message */\n" +- "\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_STRUCT, NULL, &value_element_iter)) {\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" +- "\t}\n" ++ "\t\t/* Marshal a structure onto the message */\n" ++ "\t\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_STRUCT, NULL, &value_element_iter)) {\n" ++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\treturn -1;\n" ++ "\t\t}\n" + "\n" +- "\tvalue_element_item0 = value_element->item0;\n" ++ "\t\tvalue_element_item0 = value_element->item0;\n" + "\n" +- "\t/* Marshal a char * onto the message */\n" +- "\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_STRING, &value_element_item0)) {\n" +- "\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" +- "\t}\n" ++ "\t\t/* Marshal a char * onto the message */\n" ++ "\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_STRING, &value_element_item0)) {\n" ++ "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n" ++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\treturn -1;\n" ++ "\t\t}\n" + "\n" +- "\tvalue_element_item1 = value_element->item1;\n" ++ "\t\tvalue_element_item1 = value_element->item1;\n" + "\n" +- "\t/* Marshal a uint32_t onto the message */\n" +- "\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_UINT32, &value_element_item1)) {\n" +- "\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" +- "\t}\n" ++ "\t\t/* Marshal a uint32_t onto the message */\n" ++ "\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_UINT32, &value_element_item1)) {\n" ++ "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n" ++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\treturn -1;\n" ++ "\t\t}\n" + "\n" +- "\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" ++ "\t\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n" ++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\treturn -1;\n" ++ "\t\t}\n" + "\t}\n" + "}\n" + "\n" +@@ -2912,41 +2924,43 @@ + "\treturn -1;\n" + "}\n" + "\n" +- "for (size_t value_i = 0; value[value_i]; value_i++) {\n" +- "\tDBusMessageIter value_element_iter;\n" +- "\tconst char * value_element_item0;\n" +- "\tuint32_t value_element_item1;\n" +- "\tconst MyDictEntryArrayValueElement *value_element;\n" ++ "if (value) {\n" ++ "\tfor (size_t value_i = 0; value[value_i]; value_i++) {\n" ++ "\t\tDBusMessageIter value_element_iter;\n" ++ "\t\tconst char * value_element_item0;\n" ++ "\t\tuint32_t value_element_item1;\n" ++ "\t\tconst MyDictEntryArrayValueElement *value_element;\n" + "\n" +- "\tvalue_element = value[value_i];\n" ++ "\t\tvalue_element = value[value_i];\n" + "\n" +- "\t/* Marshal a structure onto the message */\n" +- "\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_DICT_ENTRY, NULL, &value_element_iter)) {\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" +- "\t}\n" ++ "\t\t/* Marshal a structure onto the message */\n" ++ "\t\tif (! dbus_message_iter_open_container (&value_iter, DBUS_TYPE_DICT_ENTRY, NULL, &value_element_iter)) {\n" ++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\treturn -1;\n" ++ "\t\t}\n" + "\n" +- "\tvalue_element_item0 = value_element->item0;\n" ++ "\t\tvalue_element_item0 = value_element->item0;\n" + "\n" +- "\t/* Marshal a char * onto the message */\n" +- "\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_STRING, &value_element_item0)) {\n" +- "\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" +- "\t}\n" ++ "\t\t/* Marshal a char * onto the message */\n" ++ "\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_STRING, &value_element_item0)) {\n" ++ "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n" ++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\treturn -1;\n" ++ "\t\t}\n" + "\n" +- "\tvalue_element_item1 = value_element->item1;\n" ++ "\t\tvalue_element_item1 = value_element->item1;\n" + "\n" +- "\t/* Marshal a uint32_t onto the message */\n" +- "\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_UINT32, &value_element_item1)) {\n" +- "\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" +- "\t}\n" ++ "\t\t/* Marshal a uint32_t onto the message */\n" ++ "\t\tif (! dbus_message_iter_append_basic (&value_element_iter, DBUS_TYPE_UINT32, &value_element_item1)) {\n" ++ "\t\t\tdbus_message_iter_abandon_container (&value_iter, &value_element_iter);\n" ++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\treturn -1;\n" ++ "\t\t}\n" + "\n" +- "\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n" +- "\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" +- "\t\treturn -1;\n" ++ "\t\tif (! dbus_message_iter_close_container (&value_iter, &value_element_iter)) {\n" ++ "\t\t\tdbus_message_iter_abandon_container (&iter, &value_iter);\n" ++ "\t\t\treturn -1;\n" ++ "\t\t}\n" + "\t}\n" + "}\n" + "\n" +Index: libnih-1.0.3/nih-dbus-tool/type.c +=================================================================== +--- libnih-1.0.3.orig/nih-dbus-tool/type.c ++++ libnih-1.0.3/nih-dbus-tool/type.c +@@ -1101,7 +1101,7 @@ + nih_assert (block != NULL); + nih_assert (var != NULL); + +- if (! strchr (var->type, '*')) ++ if (! strchr (var->type, '*') || ! strcmp (var->type, "char * const *")) + return *block; + + if (next && (! strcmp (next->type, "size_t"))) { diff -Nru libnih-1.0.3/debian/patches/series libnih-1.0.3/debian/patches/series --- libnih-1.0.3/debian/patches/series 2012-12-31 08:57:57.000000000 -0800 +++ libnih-1.0.3/debian/patches/series 2013-11-10 23:33:48.000000000 -0800 @@ -1 +1,3 @@ 0001-Fallback-to-lstat-if-dirent.d_type-is-not-available-.patch +0001-Update-dbus-code-generator-to-allow-for-empty-lists-.patch +
signature.asc
Description: Digital signature