[Spice-devel] [PATCH] vdagent-win: Use wide characters in drap&drop code

Christophe Fergeau cfergeau at redhat.com
Thu Apr 23 10:13:25 PDT 2015


On Thu, Apr 23, 2015 at 09:24:38AM -0400, Frediano Ziglio wrote:
> > 
> > On Thu, Apr 23, 2015 at 08:23:18AM -0400, Frediano Ziglio wrote:
> > > This allow username to contain any extended characters.
> > > 
> > > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > > ---
> > >  vdagent/file_xfer.cpp | 32 +++++++++++++-------------------
> > >  vdagent/file_xfer.h   |  9 +++++----
> > >  2 files changed, 18 insertions(+), 23 deletions(-)
> > > 
> > > diff --git a/vdagent/file_xfer.cpp b/vdagent/file_xfer.cpp
> > > index 2dc138b..275768b 100644
> > > --- a/vdagent/file_xfer.cpp
> > > +++ b/vdagent/file_xfer.cpp
> > > @@ -39,7 +39,7 @@ FileXfer::~FileXfer()
> > >      for (iter = _tasks.begin(); iter != _tasks.end(); iter++) {
> > >          task = iter->second;
> > >          CloseHandle(task->handle);
> > > -        DeleteFileA(task->name);
> > > +        DeleteFile(task->name);
> > >          delete task;
> > >      }
> > >  }
> > > @@ -48,7 +48,8 @@ void FileXfer::handle_start(VDAgentFileXferStartMessage*
> > > start,
> > >                              VDAgentFileXferStatusMessage* status)
> > >  {
> > >      char* file_meta = (char*)start->data;
> > > -    char file_path[MAX_PATH], file_name[MAX_PATH];
> > > +    TCHAR file_path[MAX_PATH];
> > > +    char file_name[MAX_PATH];
> > >      ULARGE_INTEGER free_bytes;
> > >      FileXferTask* task;
> > >      uint64_t file_size;
> > > @@ -73,12 +74,12 @@ void
> > > FileXfer::handle_start(VDAgentFileXferStartMessage* start,
> > >          return;
> > >      }
> > >  
> > > -    if (FAILED(SHGetFolderPathA(NULL, CSIDL_DESKTOPDIRECTORY |
> > > CSIDL_FLAG_CREATE, NULL,
> > > +    if (FAILED(SHGetFolderPath(NULL, CSIDL_DESKTOPDIRECTORY |
> > > CSIDL_FLAG_CREATE, NULL,
> > >              SHGFP_TYPE_CURRENT, file_path))) {
> > >          vd_printf("failed getting desktop path");
> > >          return;
> > >      }
> > > -    if (!GetDiskFreeSpaceExA(file_path, &free_bytes, NULL, NULL)) {
> > > +    if (!GetDiskFreeSpaceEx(file_path, &free_bytes, NULL, NULL)) {
> > >          vd_printf("failed getting disk free space %lu", GetLastError());
> > >          return;
> > >      }
> > > @@ -87,25 +88,18 @@ void
> > > FileXfer::handle_start(VDAgentFileXferStartMessage* start,
> > >          return;
> > >      }
> > >  
> > > -    if (strlen(file_path) + strlen(file_name) + 1 >= MAX_PATH) {
> > > -        vd_printf("error: file too long %s\\%s", file_path, file_name);
> > > +    wlen = _tcslen(file_path);
> > > +    if (wlen + 3 >= MAX_PATH) {
> > 
> > Why 3 ?
> > 
> 
> On char for the separator, one for the file (can't be empty) and one for the NUL terminator.

Hmm, I'd say the 'one for the file' is going to be caught by
MultiByteToWideChar() anyway, but why not...

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150423/fb123736/attachment.sig>


More information about the Spice-devel mailing list