Returning arrays and such from server to client now works.
This commit is contained in:
@@ -85,15 +85,13 @@ glibtop_call_i (glibtop *server, glibtop_backend *backend, unsigned command,
|
|||||||
if (recv_ptr)
|
if (recv_ptr)
|
||||||
glibtop_read_i (server, backend, recv_size, recv_ptr);
|
glibtop_read_i (server, backend, recv_size, recv_ptr);
|
||||||
|
|
||||||
#if 0
|
if (resp.data_size) {
|
||||||
if (response.data_size) {
|
void *ptr = glibtop_malloc_r (server, resp.data_size);
|
||||||
void *ptr = glibtop_malloc_r (server, response.data_size);
|
|
||||||
|
|
||||||
glibtop_read_i (server, backend, response.data_size, ptr);
|
glibtop_read_i (server, backend, resp.data_size, ptr);
|
||||||
|
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@@ -295,8 +295,16 @@ sub output {
|
|||||||
$recv_buf_code .= "\t*recv_buf_ptr = _LIBGTOP_RECV_buf;\n";
|
$recv_buf_code .= "\t*recv_buf_ptr = _LIBGTOP_RECV_buf;\n";
|
||||||
$recv_buf_code .= "\t*recv_size_ptr = _LIBGTOP_RECV_len;\n";
|
$recv_buf_code .= "\t*recv_size_ptr = _LIBGTOP_RECV_len;\n";
|
||||||
|
|
||||||
|
if ($line_fields[3] =~ /^array/) {
|
||||||
|
$recv_buf_code .= "\n";
|
||||||
|
$recv_buf_code .= "\tif (recv_data_ptr) {\n";
|
||||||
|
$recv_buf_code .= "\t\t*recv_data_ptr = retval;\n";
|
||||||
|
$recv_buf_code .= "\t\t*recv_data_size_ptr = array.total;\n";
|
||||||
|
$recv_buf_code .= "\t}\n";
|
||||||
|
}
|
||||||
|
|
||||||
$func_decl_code = sprintf
|
$func_decl_code = sprintf
|
||||||
(qq[static int\n_glibtop_demarshal_%s_i (glibtop *server, glibtop_backend *backend, const void *send_ptr, size_t send_size, void *data_ptr, size_t data_size, void **recv_buf_ptr, size_t *recv_size_ptr, int *retval_ptr)\n], $feature);
|
(qq[static int\n_glibtop_demarshal_%s_i (glibtop *server, glibtop_backend *backend, const void *send_ptr, size_t send_size, void *data_ptr, size_t data_size, void **recv_buf_ptr, size_t *recv_size_ptr, void **recv_data_ptr, size_t *recv_data_size_ptr, int *retval_ptr)\n], $feature);
|
||||||
|
|
||||||
if (!($call_code eq '')) {
|
if (!($call_code eq '')) {
|
||||||
$call_code .= "\n";
|
$call_code .= "\n";
|
||||||
@@ -314,7 +322,7 @@ sub output {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$func_decl_code = sprintf
|
$func_decl_code = sprintf
|
||||||
(qq[int\nglibtop_demarshal_func_i (glibtop *server, glibtop_backend *backend, unsigned command, const void *send_ptr, size_t send_size, void *data_ptr, size_t data_size, void **recv_buf_ptr, size_t *recv_size_ptr, int *retval_ptr)]);
|
(qq[int\nglibtop_demarshal_func_i (glibtop *server, glibtop_backend *backend, unsigned command, const void *send_ptr, size_t send_size, void *data_ptr, size_t data_size, void **recv_buf_ptr, size_t *recv_size_ptr, void **recv_data_ptr, size_t *recv_data_size_ptr, int *retval_ptr)]);
|
||||||
|
|
||||||
$switch_body_code = '';
|
$switch_body_code = '';
|
||||||
|
|
||||||
@@ -322,7 +330,7 @@ for ($nr = 1; $nr <= $feature_count; $nr++) {
|
|||||||
$feature = $features{$nr};
|
$feature = $features{$nr};
|
||||||
|
|
||||||
$switch_body_code .= sprintf
|
$switch_body_code .= sprintf
|
||||||
(qq[\tcase GLIBTOP_CMND_%s:\n\t\treturn _glibtop_demarshal_%s_i\n\t\t\t(server, backend, send_ptr, send_size,\n\t\t\t data_ptr, data_size,\n\t\t\t recv_buf_ptr, recv_size_ptr, retval_ptr);\n],
|
(qq[\tcase GLIBTOP_CMND_%s:\n\t\treturn _glibtop_demarshal_%s_i\n\t\t\t(server, backend, send_ptr, send_size,\n\t\t\t data_ptr, data_size,\n\t\t\t recv_buf_ptr, recv_size_ptr,\n\t\t\t recv_data_ptr, recv_data_size_ptr, retval_ptr);\n],
|
||||||
&toupper ($feature), $feature);
|
&toupper ($feature), $feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -112,10 +112,10 @@ handle_slave_connection (int input, int output)
|
|||||||
// glibtop_send_version_i (glibtop_global_server, output);
|
// glibtop_send_version_i (glibtop_global_server, output);
|
||||||
|
|
||||||
while (do_read (input, cmnd, sizeof (glibtop_command))) {
|
while (do_read (input, cmnd, sizeof (glibtop_command))) {
|
||||||
size_t recv_size = 0, send_size = 0;
|
size_t recv_size = 0, send_size = 0, recv_data_size = 0;
|
||||||
|
void *recv_ptr = NULL, *recv_data_ptr = NULL;
|
||||||
char parameter [BUFSIZ];
|
char parameter [BUFSIZ];
|
||||||
int retval, func_retval;
|
int retval, func_retval;
|
||||||
void *recv_ptr = NULL;
|
|
||||||
glibtop_response resp;
|
glibtop_response resp;
|
||||||
|
|
||||||
fprintf (stderr, "Slave %d received command "
|
fprintf (stderr, "Slave %d received command "
|
||||||
@@ -151,18 +151,24 @@ handle_slave_connection (int input, int output)
|
|||||||
cmnd->command, parameter,
|
cmnd->command, parameter,
|
||||||
send_size, NULL, 0,
|
send_size, NULL, 0,
|
||||||
&recv_ptr, &recv_size,
|
&recv_ptr, &recv_size,
|
||||||
|
&recv_data_ptr, &recv_data_size,
|
||||||
&func_retval);
|
&func_retval);
|
||||||
|
|
||||||
fprintf (stderr, "Retval %d / %d - %p - %d\n",
|
fprintf (stderr, "Retval %d / %d - %p - %d\n",
|
||||||
retval, func_retval, recv_ptr, recv_size);
|
retval, func_retval, recv_ptr, recv_size);
|
||||||
|
|
||||||
|
if (recv_data_size) {
|
||||||
|
fprintf (stderr, "Returning %d bytes of data from %p.\n",
|
||||||
|
recv_data_size, recv_data_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
memset (&resp, 0, sizeof (glibtop_response));
|
memset (&resp, 0, sizeof (glibtop_response));
|
||||||
|
|
||||||
resp.retval = retval;
|
resp.retval = retval;
|
||||||
resp.glibtop_errno = func_retval;
|
resp.glibtop_errno = func_retval;
|
||||||
resp.recv_size = recv_size;
|
resp.recv_size = recv_size;
|
||||||
resp.data_size = 0;
|
resp.data_size = recv_data_size;
|
||||||
|
|
||||||
do_output (output, &resp, recv_ptr, NULL);
|
do_output (output, &resp, recv_ptr, recv_data_ptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -85,7 +85,7 @@ void
|
|||||||
handle_slave_connection (int input, int output);
|
handle_slave_connection (int input, int output);
|
||||||
|
|
||||||
int
|
int
|
||||||
glibtop_demarshal_func_i (glibtop *server, glibtop_backend *backend, unsigned command, const void *send_ptr, size_t send_size, void *data_ptr, size_t data_size, void **recv_buf_ptr, size_t *recv_size_ptr, int *retval_ptr);
|
glibtop_demarshal_func_i (glibtop *server, glibtop_backend *backend, unsigned command, const void *send_ptr, size_t send_size, void *data_ptr, size_t data_size, void **recv_buf_ptr, size_t *recv_size_ptr, void **recv_data_ptr, size_t *recv_data_size_ptr, int *retval_ptr);
|
||||||
|
|
||||||
void
|
void
|
||||||
glibtop_send_version_i (glibtop *server, int fd);
|
glibtop_send_version_i (glibtop *server, int fd);
|
||||||
|
Reference in New Issue
Block a user