[ https://issues.apache.org/jira/browse/THRIFT-3178?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14661759#comment-14661759 ]
ASF GitHub Bot commented on THRIFT-3178: ---------------------------------------- GitHub user simonsouth opened a pull request: https://github.com/apache/thrift/pull/581 THRIFT-3178: c_glib does not compile These changes allow Hypertable's Thrift interface to be compiled by the C (GLib) compiler by correcting the way the compiler handles "compound" and typedef'd list types. The changes include - Adding test cases for list-of-string-list containers (variables of type list<list<string>>) returned by service methods, both aliased with a typedef and not; - Modifying the compiler to - Initialize list variables (pointer arrays) in the generated code before they are used, - Correctly identify the type of typedef'd list elements and - Omit the dereference operator ("*") in typedef'd types to match the way they would naturally be used in client code. The final commit refactors the test cases to put common code related to creating a service client in its own function. You can merge this pull request into a Git repository by running: $ git pull https://github.com/simonsouth/thrift thrift-3178-c_glib-does-not-compile Alternatively you can review and apply these changes as the patch at: https://github.com/apache/thrift/pull/581.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #581 ---- commit cc87b14bf2f895dc0ceb470008473256c6921517 Author: Simon South <sso...@simonsouth.com> Date: 2015-08-07T10:31:35Z c_glib: Add unit test for lists of string lists Adds a unit test that covers lists of lists of strings returned from service methods. commit c2d7276500842ae3901b6d7835f467de7577a9bb Author: Simon South <sso...@simonsouth.com> Date: 2015-08-07T10:32:54Z c_glib: Compiler: Create list variables before use With this change generated code will create list (i.e. g_ptr_array) variables before using them. This prevents an assertion failure when deserializing a list from a service-method response. commit 906f2a671ad7731e7f6760deff6e0517d0f202b4 Author: Simon South <sso...@simonsouth.com> Date: 2015-08-07T11:41:43Z c_glib: Add unit test for typedef'd lists of string lists Adds a service-handler method and unit test that duplicates the existing test for lists of string lists returned from service methods, but adds the use of typedef'd types. commit 21a436134d956983facf63163a6a39443a8c7a7d Author: Simon South <sso...@simonsouth.com> Date: 2015-08-07T11:43:21Z c_glib: Compiler: Correctly handle typedef'd list types With this change the compiler will emit code that correctly handles typedef'd list types returned from service methods. The specific changes are - Omit the dereference operator ("*") from container type names output in typedef statements, to allow the type to be used as a programmer would expect in client code; and - Determine the underlying type of a list's typedef'd elements when generating code to serialize those elements. commit 2d6384bafcc832134c9f705bb5d75da4f0414d00 Author: Simon South <sso...@simonsouth.com> Date: 2015-08-07T12:18:00Z c_glib: testcontainertest.c: Factor out common code Add a helper method that executes a test case against a newly constructed service client, then refactor the test methods to use this helper. ---- > glib C does not compile > ----------------------- > > Key: THRIFT-3178 > URL: https://issues.apache.org/jira/browse/THRIFT-3178 > Project: Thrift > Issue Type: Bug > Components: C glib - Compiler, C glib - Library > Affects Versions: 0.9.2 > Environment: Ubuntu GCC, CGLIB 2 Hypertable > Reporter: nijx > Assignee: Simon South > Labels: Hypertable > > Generated glibc files in c compile error > /home/ubuntu/Downloads/ht_thrf/gen-c_glib/client_service.c: In function > ‘client_service_client_recv_scanner_get_cells_as_arrays’: > /home/node/ubuntu/ht_thrf/gen-c_glib/client_service.c:8525:38: warning: > passing argument 1 of ‘g_ptr_array_add’ from incompatible pointer type > g_ptr_array_add (_elem119, _elem120); > ^ > In file included from /usr/include/glib-2.0/glib.h:31:0, > from /usr/include/glib-2.0/gobject/gbinding.h:28, > from /usr/include/glib-2.0/glib-object.h:23, > from > /opt/hypertable/current/include/thrift/c_glib/transport/thrift_socket.h:23, > from <command-line>:1: > /usr/include/glib-2.0/glib/garray.h:168:12: note: expected ‘struct GPtrArray > *’ but argument is of type ‘struct GPtrArray **’ > void g_ptr_array_add (GPtrArray *array, > ^ > /home/ubuntu/Downloads/ht_thrf/gen-c_glib/client_service.c: In function > ‘client_service_client_recv_next_cells_as_arrays’: > /home/node/Downloads/ht_thrf/gen-c_glib/client_service.c:8771:38: warning: > passing argument 1 of ‘g_ptr_array_add’ from incompatible pointer type > g_ptr_array_add (_elem121, _elem122); > ^ > In file included from /usr/include/glib-2.0/glib.h:31:0, > from /usr/include/glib-2.0/gobject/gbinding.h:28, > from /usr/include/glib-2.0/glib-object.h:23, > from > /opt/hypertable/current/include/thrift/c_glib/transport/thrift_socket.h:23, > from <command-line>:1: > /usr/include/glib-2.0/glib/garray.h:168:12: note: expected ‘struct GPtrArray > *’ but argument is of type ‘struct GPtrArray **’ > void g_ptr_array_add (GPtrArray *array, -- This message was sent by Atlassian JIRA (v6.3.4#6332)