Fix crash in w32_dirent, minor spelling in scp.

This commit is contained in:
Ray Hayes 2016-10-26 11:00:11 -07:00
parent 91b30b64fb
commit 5bd9d2aace
2 changed files with 13 additions and 10 deletions

4
scp.c
View File

@ -834,7 +834,7 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
// Create a pair of pipes for communicating with ssh
// which we will spawn
// Do the plunmbing so that child ssh process to be spawned has its
// Do the plumbing so that child ssh process to be spawned has its
// standard input from the pout[0] and its standard output going to
// pin[1]
@ -1006,7 +1006,7 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
}
/*
* This functions executes a command simlar to do_cmd(), but expects the
* This functions executes a command similar to do_cmd(), but expects the
* input and output descriptors to be setup by a previous call to do_cmd().
* This way the input and output of two commands can be connected.
*/

View File

@ -7,6 +7,7 @@
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <utf.h>
#include "win32_dirent.h"
@ -18,13 +19,16 @@ DIR * opendir(char *name)
intptr_t hFile;
DIR *pdir;
wchar_t searchstr[MAX_PATH];
wchar_t wname[MAX_PATH];
wchar_t* wname = NULL;
int needed;
char *tmp = NULL;
MultiByteToWideChar(CP_UTF8, 0, name, -1, wname, MAX_PATH);
if ((wname = utf8_to_utf16(name)) == NULL)
fatal("failed to covert input arguments");
// add *.* for Windows _findfirst() search pattern
swprintf_s(searchstr, MAX_PATH, L"%s\\*.*", wname);
free(wname);
if ((hFile = _wfindfirst(searchstr, &c_file)) == -1L) {
if (1) // verbose
@ -40,11 +44,12 @@ DIR * opendir(char *name)
pdir->c_file.time_create = c_file.time_create;
pdir->c_file.time_write = c_file.time_write;
if ((needed = WideCharToMultiByte(CP_UTF8, 0, c_file.name, -1, NULL, 0, NULL, NULL)) == 0 ||
WideCharToMultiByte(CP_UTF8, 0, c_file.name, -1, pdir->c_file.name, needed, NULL, NULL) != needed)
if ((tmp = utf16_to_utf8(&(c_file.name))) == NULL)
fatal("failed to covert input arguments");
strcpy_s(pdir->c_file.name, MAX_PATH, tmp);
strcpy_s(pdir->initName, sizeof(pdir->initName), pdir->c_file.name);
free(tmp);
return pdir ;
}
@ -69,7 +74,6 @@ int closedir(DIR *dirp)
by a later readdir call on the same DIR stream. */
struct dirent *readdir(void *avp)
{
int needed;
struct dirent *pdirentry;
struct _wfinddata_t c_file;
DIR *dirp = (DIR *)avp;
@ -83,10 +87,9 @@ struct dirent *readdir(void *avp)
}
pdirentry = (struct dirent *) malloc( sizeof(struct dirent) );
if ((tmp = utf16_to_utf8(pdirentry->d_name)) == NULL)
if ((tmp = utf16_to_utf8(&(c_file.name))) == NULL)
fatal("failed to covert input arguments");
strcpy(c_file.name[0], tmp);
free(tmp);
pdirentry->d_name= tmp;
tmp = NULL;
pdirentry->d_ino = 1; // a fictious one like UNIX to say it is nonzero