if ((host = strchr(userhost, '@')) == NULL)
if ((host = strrchr(userhost, '@')) == NULL)
main(int argc, char **argv){	int in, out, ch;	pid_t sshpid;	char *host, *userhost, *cp, *file2;	int debug_level = 0, sshver = 2;	char *file1 = NULL, *sftp_server = NULL;	char *ssh_program = _PATH_SSH_PROGRAM, *sftp_direct = NULL;	LogLevel ll = SYSLOG_LEVEL_INFO;	arglist args;	extern int optind;	extern char *optarg;	args.list = NULL;	addargs(&args, "ssh");		/* overwritten with ssh_program */	addargs(&args, "-oForwardX11 no");	addargs(&args, "-oForwardAgent no");	addargs(&args, "-oClearAllForwardings yes");	ll = SYSLOG_LEVEL_INFO;	infile = stdin;		/* Read from STDIN unless changed by -b */	while ((ch = getopt(argc, argv, "1hvCo:s:S:b:B:F:P:R:")) != -1) {		switch (ch) {		case 'C':			addargs(&args, "-C");			break;		case 'v':			if (debug_level < 3) {				addargs(&args, "-v");				ll = SYSLOG_LEVEL_DEBUG1 + debug_level;			}			debug_level++;			break;		case 'F':		case 'o':			addargs(&args, "-%c%s", ch, optarg);			break;		case '1':			sshver = 1;			if (sftp_server == NULL)				sftp_server = _PATH_SFTP_SERVER;			break;		case 's':			sftp_server = optarg;			break;		case 'S':			ssh_program = optarg;			break;		case 'b':			if (infile == stdin) {				infile = fopen(optarg, "r");				if (infile == NULL)					fatal("%s (%s).", strerror(errno), optarg);			} else				fatal("Filename already specified.");			break;		case 'P':			sftp_direct = optarg;			break;		case 'B':			copy_buffer_len = strtol(optarg, &cp, 10);			if (copy_buffer_len == 0 || *cp != '\0')				fatal("Invalid buffer size \"%s\"", optarg);			break;		case 'R':			num_requests = strtol(optarg, &cp, 10);			if (num_requests == 0 || *cp != '\0')				fatal("Invalid number of requests \"%s\"",				    optarg);			break;		case 'h':		default:			usage();		}	}	log_init(argv[0], ll, SYSLOG_FACILITY_USER, 1);	if (sftp_direct == NULL) {		if (optind == argc || argc > (optind + 2))			usage();		userhost = xstrdup(argv[optind]);		file2 = argv[optind+1];		if ((cp = colon(userhost)) != NULL) {			*cp++ = '\0';			file1 = cp;		}		if ((host = strchr(userhost, '@')) == NULL)			host = userhost;		else {			*host++ = '\0';			if (!userhost[0]) {				fprintf(stderr, "Missing username\n");				usage();			}			addargs(&args, "-l%s",userhost);		}		host = cleanhostname(host);		if (!*host) {			fprintf(stderr, "Missing hostname\n");			usage();		}		addargs(&args, "-oProtocol %d", sshver);		/* no subsystem if the server-spec contains a '/' */		if (sftp_server == NULL || strchr(sftp_server, '/') == NULL)			addargs(&args, "-s");		addargs(&args, "%s", host);		addargs(&args, "%s", (sftp_server != NULL ?		    sftp_server : "sftp"));		args.list[0] = ssh_program;		fprintf(stderr, "Connecting to %s...\n", host);		connect_to_server(ssh_program, args.list, &in, &out,		    &sshpid);	} else {		args.list = NULL;		addargs(&args, "sftp-server");		fprintf(stderr, "Attaching to %s...\n", sftp_direct);		connect_to_server(sftp_direct, args.list, &in, &out,		    &sshpid);	}	interactive_loop(in, out, file1, file2);	close(in);	close(out);	if (infile != stdin)		fclose(infile);	while (waitpid(sshpid, NULL, 0) == -1)		if (errno != EINTR)			fatal("Couldn't wait for ssh process: %s",			    strerror(errno));	exit(0);}