diff options
author | Kamal Mostafa <kamal@whence.com> | 2012-04-20 15:58:32 +0000 |
---|---|---|
committer | Kamal Mostafa <kamal@whence.com> | 2012-04-20 15:58:32 +0000 |
commit | 3aeae5f2a6725c19f67c54c45c2ba4273ccc8030 (patch) | |
tree | 6d4f0332c218c7768f51de30bb2ca67e40cf84a4 | |
parent | 979edbecc69ef3b786dc2addb2c62d64cb7f3cc9 (diff) | |
download | distcc-git-3aeae5f2a6725c19f67c54c45c2ba4273ccc8030.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).
-rw-r--r-- | include_server/c_extensions/distcc_pump_c_extensions_module.c | 4 | ||||
-rw-r--r-- | src/clirpc.c | 11 | ||||
-rw-r--r-- | src/distcc.h | 5 | ||||
-rw-r--r-- | src/include_server_if.c | 8 | ||||
-rw-r--r-- | src/remote.c | 2 | ||||
-rw-r--r-- | src/rpc.c | 11 | ||||
-rw-r--r-- | src/rpc.h | 5 | ||||
-rw-r--r-- | src/serve.c | 2 |
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; @@ -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]); @@ -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; |