Returning arrays and such from server to client now works.

This commit is contained in:
Martin Baulig
2000-01-09 20:13:51 +00:00
parent ba466fe572
commit 995b506920
4 changed files with 25 additions and 13 deletions

View File

@@ -85,15 +85,13 @@ glibtop_call_i (glibtop *server, glibtop_backend *backend, unsigned command,
if (recv_ptr)
glibtop_read_i (server, backend, recv_size, recv_ptr);
#if 0
if (response.data_size) {
void *ptr = glibtop_malloc_r (server, response.data_size);
if (resp.data_size) {
void *ptr = glibtop_malloc_r (server, resp.data_size);
glibtop_read_i (server, backend, response.data_size, ptr);
glibtop_read_i (server, backend, resp.data_size, ptr);
return ptr;
}
#endif
return NULL;
}

View File

@@ -295,8 +295,16 @@ sub output {
$recv_buf_code .= "\t*recv_buf_ptr = _LIBGTOP_RECV_buf;\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
(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 '')) {
$call_code .= "\n";
@@ -314,7 +322,7 @@ sub output {
}
$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 = '';
@@ -322,7 +330,7 @@ for ($nr = 1; $nr <= $feature_count; $nr++) {
$feature = $features{$nr};
$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);
}

View File

@@ -112,10 +112,10 @@ handle_slave_connection (int input, int output)
// glibtop_send_version_i (glibtop_global_server, output);
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];
int retval, func_retval;
void *recv_ptr = NULL;
glibtop_response resp;
fprintf (stderr, "Slave %d received command "
@@ -151,18 +151,24 @@ handle_slave_connection (int input, int output)
cmnd->command, parameter,
send_size, NULL, 0,
&recv_ptr, &recv_size,
&recv_data_ptr, &recv_data_size,
&func_retval);
fprintf (stderr, "Retval %d / %d - %p - %d\n",
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));
resp.retval = retval;
resp.glibtop_errno = func_retval;
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);
}
}

View File

@@ -85,7 +85,7 @@ void
handle_slave_connection (int input, int output);
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
glibtop_send_version_i (glibtop *server, int fd);