[patch] Generalize dcc_{r,x}_argv routines

14 views
Skip to first unread message

Kamal Mostafa

unread,
Apr 18, 2012, 4:57:32 PM4/18/12
to distcc-...@googlegroups.com, ka...@whence.com
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).

Index: src/distcc.h
===================================================================
--- src/distcc.h (revision 765)
+++ src/distcc.h (working copy)
@@ -155,7 +155,10 @@
/* 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);
Index: src/clirpc.c
===================================================================
--- src/clirpc.c (revision 765)
+++ src/clirpc.c (working copy)
@@ -65,9 +65,12 @@


/**
- * 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 @@

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;
}

Index: src/rpc.h
===================================================================
--- src/rpc.h (revision 765)
+++ src/rpc.h (working copy)
@@ -45,4 +45,7 @@

/* 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);
Index: src/rpc.c
===================================================================
--- src/rpc.c (revision 765)
+++ src/rpc.c (working copy)
@@ -305,9 +305,12 @@
}

/**
- * 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 @@

*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 @@
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]);
Index: src/remote.c
===================================================================
--- src/remote.c (revision 765)
+++ src/remote.c (working copy)
@@ -143,7 +143,7 @@
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;
Index: src/serve.c
===================================================================
--- src/serve.c (revision 765)
+++ src/serve.c (working copy)
@@ -624,7 +624,7 @@
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;
Index: src/include_server_if.c
===================================================================
--- src/include_server_if.c (revision 765)
+++ src/include_server_if.c (working copy)
@@ -96,12 +96,10 @@
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);
Index: include_server/c_extensions/distcc_pump_c_extensions_module.c
===================================================================
--- include_server/c_extensions/distcc_pump_c_extensions_module.c (revision 765)
+++ include_server/c_extensions/distcc_pump_c_extensions_module.c (working copy)
@@ -152,7 +152,7 @@
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 @@
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;

Kamal Mostafa

unread,
Apr 18, 2012, 5:02:18 PM4/18/12
to distcc-...@googlegroups.com, ka...@whence.com

Same patch, as an attachment this time.


 -Kamal
01-generalize-dcc-rx-argv.patch

Fergus Henderson

unread,
Apr 18, 2012, 10:39:49 PM4/18/12
to distcc-...@googlegroups.com, ka...@whence.com

Looks good to me.
Thanks for the patch.

--
You received this message because you are subscribed to the "distcc-patches" list.
To post to this list, send email to <distcc-...@googlegroups.com>.
To unsubscribe from this list, send email to <distcc-patche...@googlegroups.com>.
For archives and more options, see <http://groups.google.com/group/distcc-patches>.
Reply all
Reply to author
Forward
0 new messages