summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkamal@whence.com <kamal@whence.com@01de4be4-8c4a-0410-9132-4925637da917>2012-04-20 15:58:32 +0000
committerkamal@whence.com <kamal@whence.com@01de4be4-8c4a-0410-9132-4925637da917>2012-04-20 15:58:32 +0000
commit17bdb296f31a8ecc1baee45a5d98814d774b207f (patch)
tree6d4f0332c218c7768f51de30bb2ca67e40cf84a4
parent2f422c03925e82bf88b05da823813073a985b0e5 (diff)
downloaddistcc-17bdb296f31a8ecc1baee45a5d98814d774b207f.tar.gz
Generalize dcc_{r,x}_argv routines
Generalize the dcc_{r,x}_argv routines so they can be used to transfer arbitrary array-of-strings tokens (useful for protocol hacking experiments; no functional change). git-svn-id: http://distcc.googlecode.com/svn/trunk@766 01de4be4-8c4a-0410-9132-4925637da917
-rw-r--r--include_server/c_extensions/distcc_pump_c_extensions_module.c4
-rw-r--r--src/clirpc.c11
-rw-r--r--src/distcc.h5
-rw-r--r--src/include_server_if.c8
-rw-r--r--src/remote.c2
-rw-r--r--src/rpc.c11
-rw-r--r--src/rpc.h5
-rw-r--r--src/serve.c2
8 files changed, 29 insertions, 19 deletions
diff --git a/include_server/c_extensions/distcc_pump_c_extensions_module.c b/include_server/c_extensions/distcc_pump_c_extensions_module.c
index f5de2e8..549f922 100644
--- a/include_server/c_extensions/distcc_pump_c_extensions_module.c
+++ b/include_server/c_extensions/distcc_pump_c_extensions_module.c
@@ -152,7 +152,7 @@ RArgv(PyObject *dummy, PyObject *args) {
UNUSED(dummy);
if (!PyArg_ParseTuple(args, "i", &ifd))
return NULL;
- if (dcc_r_argv(ifd, &argv)) {
+ if (dcc_r_argv(ifd, "ARGC", "ARGV", &argv)) {
PyErr_SetString(distcc_pump_c_extensionsError, "Couldn't read that.");
goto error;
}
@@ -212,7 +212,7 @@ XArgv(PyObject *dummy, PyObject *args) {
argv[i] = PyString_AsString(string_object); /* does not increase
ref count */
}
- ret = dcc_x_argv(ifd, argv);
+ ret = dcc_x_argv(ifd, "ARGC", "ARGV", argv);
free(argv);
if (ret == 0)
Py_RETURN_TRUE;
diff --git a/src/clirpc.c b/src/clirpc.c
index b6ef48b..606f910 100644
--- a/src/clirpc.c
+++ b/src/clirpc.c
@@ -65,9 +65,12 @@ int dcc_x_req_header(int fd,
/**
- * Transmit an argv array.
+ * Transmit an argv-type array.
**/
-int dcc_x_argv(int fd, char **argv)
+int dcc_x_argv(int fd,
+ const char *argc_token,
+ const char *argv_token,
+ char **argv)
{
int i;
int ret;
@@ -75,11 +78,11 @@ int dcc_x_argv(int fd, char **argv)
argc = dcc_argv_len(argv);
- if (dcc_x_token_int(fd, "ARGC", (unsigned) argc))
+ if (dcc_x_token_int(fd, argc_token, (unsigned) argc))
return EXIT_PROTOCOL_ERROR;
for (i = 0; i < argc; i++) {
- if ((ret = dcc_x_token_string(fd, "ARGV", argv[i])))
+ if ((ret = dcc_x_token_string(fd, argv_token, argv[i])))
return ret;
}
diff --git a/src/distcc.h b/src/distcc.h
index 7f2578f..23f9456 100644
--- a/src/distcc.h
+++ b/src/distcc.h
@@ -155,7 +155,10 @@ int dcc_recursion_safeguard(void);
/* clirpc.c */
int dcc_x_req_header(int fd,
enum dcc_protover protover);
-int dcc_x_argv(int fd, char **argv);
+int dcc_x_argv(int fd,
+ const char *argc_token,
+ const char *argv_token,
+ char **argv);
int dcc_x_cwd(int fd);
int dcc_is_link(const char *fname, int *is_link);
int dcc_read_link(const char* fname, char *points_to);
diff --git a/src/include_server_if.c b/src/include_server_if.c
index 8d38e36..22679e9 100644
--- a/src/include_server_if.c
+++ b/src/include_server_if.c
@@ -96,12 +96,10 @@ int dcc_talk_to_include_server(char **argv, char ***files)
if (dcc_connect_by_addr((struct sockaddr *) &sa, sizeof(sa), &fd))
return 1;
- /* the following code uses dcc_r_arg to receive an array of strings
- * which are NOT command line arguments. TODO: implement dcc_r_argv
- * on top a generic array-of-strings function */
+ /* TODO? switch include_server to use more appropriate token names */
if (dcc_x_cwd(fd) ||
- dcc_x_argv(fd, argv) ||
- dcc_r_argv(fd, files)) {
+ dcc_x_argv(fd, "ARGC", "ARGV", argv) ||
+ dcc_r_argv(fd, "ARGC", "ARGV", files)) {
rs_log_warning("failed to talk to include server '%s'",
include_server_port);
dcc_close(fd);
diff --git a/src/remote.c b/src/remote.c
index ee5d63c..2d00e82 100644
--- a/src/remote.c
+++ b/src/remote.c
@@ -143,7 +143,7 @@ dcc_send_header(int net_fd,
if ((ret = dcc_x_cwd(net_fd)))
return ret;
}
- if ((ret = dcc_x_argv(net_fd, argv)))
+ if ((ret = dcc_x_argv(net_fd, "ARGC", "ARGV", argv)))
return ret;
return 0;
diff --git a/src/rpc.c b/src/rpc.c
index 855ca67..56210d7 100644
--- a/src/rpc.c
+++ b/src/rpc.c
@@ -305,9 +305,12 @@ int dcc_r_token_string(int ifd, const char *expect_token,
}
/**
- * Read an argv[] vector from the network.
+ * Read an argv-type vector from the network.
**/
-int dcc_r_argv(int ifd, /*@out@*/ char ***argv)
+int dcc_r_argv(int ifd,
+ const char *argc_token,
+ const char *argv_token,
+ /*@out@*/ char ***argv)
{
unsigned i;
unsigned argc;
@@ -316,7 +319,7 @@ int dcc_r_argv(int ifd, /*@out@*/ char ***argv)
*argv = NULL;
- if (dcc_r_token_int(ifd, "ARGC", &argc))
+ if (dcc_r_token_int(ifd, argc_token, &argc))
return EXIT_PROTOCOL_ERROR;
rs_trace("reading %d arguments from job submission", argc);
@@ -331,7 +334,7 @@ int dcc_r_argv(int ifd, /*@out@*/ char ***argv)
a[argc] = NULL;
for (i = 0; i < argc; i++) {
- if ((ret = dcc_r_token_string(ifd, "ARGV", &a[i])))
+ if ((ret = dcc_r_token_string(ifd, argv_token, &a[i])))
return ret;
rs_trace("argv[%d] = \"%s\"", i, a[i]);
diff --git a/src/rpc.h b/src/rpc.h
index 8393f77..5ddf0e3 100644
--- a/src/rpc.h
+++ b/src/rpc.h
@@ -45,4 +45,7 @@ int dcc_explain_mismatch(const char *buf, size_t buflen, int ifd);
/* srvrpc.c */
int dcc_r_request_header(int ifd, enum dcc_protover *);
-int dcc_r_argv(int ifd, /*@out@*/ char ***argv);
+int dcc_r_argv(int ifd,
+ const char *argc_token,
+ const char *argv_token,
+ /*@out@*/ char ***argv);
diff --git a/src/serve.c b/src/serve.c
index 6ee6dd0..5eb940c 100644
--- a/src/serve.c
+++ b/src/serve.c
@@ -624,7 +624,7 @@ static int dcc_run_job(int in_fd,
changed_directory = 1;
}
- if ((ret = dcc_r_argv(in_fd, &argv))
+ if ((ret = dcc_r_argv(in_fd, "ARGC", "ARGV", &argv))
|| (ret = dcc_scan_args(argv, &orig_input_tmp, &orig_output_tmp,
&tweaked_argv)))
goto out_cleanup;