- args[i] = args[i-1]; /* move command name over --server */
- args[i+1] = save_opts1;
- args[i+2] = save_opts2;
- while (args[i]) {
- write_sbuf(*f_out_p, args[i++]);
- write_byte(*f_out_p, 0);
- }
- write_byte(*f_out_p, 0);
+
+ for (i = 0; args[i]; i++) {} /* find first NULL */
+ args[i] = "rsync"; /* set a new arg0 */
+ if (verbose > 1)
+ print_child_argv("protected args:", args + i + 1);
+ fd = *f_out_p;
+ do {
+#ifdef ICONV_OPTION
+ if (convert) {
+ INIT_XBUF_STRLEN(inbuf, args[i]);
+ iconvbufs(ic_send, &inbuf, &outbuf,
+ ICB_EXPAND_OUT | ICB_INCLUDE_BAD | ICB_INCLUDE_INCOMPLETE);
+ outbuf.buf[outbuf.len] = '\0';
+ write_buf(fd, outbuf.buf, outbuf.len + 1);
+ outbuf.len = 0;
+ } else
+#endif
+ write_buf(fd, args[i], strlen(args[i]) + 1);
+ } while (args[++i]);
+ write_byte(fd, 0);
+#ifdef ICONV_OPTION
+ if (convert)
+ free(outbuf.buf);
+#endif