} else if (!*dupsource) {  sfree(dupsource); dupsource = dupstr(".");
int scp_sink_setup(char *source, int preserve, int recursive){    if (using_sftp) {	char *newsource;	/*	 * It's possible that the source string we've been given	 * contains a wildcard. If so, we must split the directory	 * away from the wildcard itself (throwing an error if any	 * wildcardness comes before the final slash) and arrange	 * things so that a dirstack entry will be set up.	 */	newsource = smalloc(1+strlen(source));	if (!wc_unescape(newsource, source)) {	    /* Yes, here we go; it's a wildcard. Bah. */	    char *dupsource, *lastpart, *dirpart, *wildcard;	    dupsource = dupstr(source);	    lastpart = stripslashes(dupsource, 0);	    wildcard = dupstr(lastpart);	    *lastpart = '\0';	    if (*dupsource && dupsource[1]) {		/*		 * The remains of dupsource are at least two		 * characters long, meaning the pathname wasn't		 * empty or just `/'. Hence, we remove the trailing		 * slash.		 */		lastpart[-1] = '\0';	    }	    /*	     * Now we have separated our string into dupsource (the	     * directory part) and wildcard. Both of these will	     * need freeing at some point. Next step is to remove	     * wildcard escapes from the directory part, throwing	     * an error if it contains a real wildcard.	     */	    dirpart = smalloc(1+strlen(dupsource));	    if (!wc_unescape(dirpart, dupsource)) {		tell_user(stderr, "%s: multiple-level wildcards unsupported",			  source);		errs++;		sfree(dirpart);		sfree(wildcard);		sfree(dupsource);		return 1;	    }	    /*	     * Now we have dirpart (unescaped, ie a valid remote	     * path), and wildcard (a wildcard). This will be	     * sufficient to arrange a dirstack entry.	     */	    scp_sftp_remotepath = dirpart;	    scp_sftp_wildcard = wildcard;	    sfree(dupsource);	} else {	    scp_sftp_remotepath = newsource;	    scp_sftp_wildcard = NULL;	}	scp_sftp_preserve = preserve;	scp_sftp_recursive = recursive;	scp_sftp_donethistarget = 0;	scp_sftp_dirstack_head = NULL;    }    return 0;}