- if (protect_args) {
- int fd;
-#ifdef ICONV_OPTION
- int convert = ic_send != (iconv_t)-1;
- xbuf outbuf, inbuf;
-
- if (convert)
- alloc_xbuf(&outbuf, 1024);
-#endif
-
- ret = piped_child(args, f_in_p, f_out_p);
-
- 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
- } else
- ret = piped_child(args, f_in_p, f_out_p);