diff options
Diffstat (limited to 'ExtraSocket.cpp')
-rw-r--r-- | ExtraSocket.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/ExtraSocket.cpp b/ExtraSocket.cpp new file mode 100644 index 0000000..ef196fa --- /dev/null +++ b/ExtraSocket.cpp @@ -0,0 +1,60 @@ +/** \file ExtraSocket.h +\brief Define the socket of ultracopier +\author alpha_one_x86 +\licence GPL3, see the file COPYING */ + +#include "ExtraSocket.h" +#include <QByteArray> +#include <stdio.h> + +std::string ExtraSocket::pathSocket(const std::string &name) +{ +#ifdef Q_OS_UNIX + return name+"-"+std::to_string(getuid()); +#else + QString userName; + + /* bad way for catchcopy compatibility + char uname[1024]; + DWORD len=1023; + if(GetUserNameA(uname, &len)!=FALSE) + userName=toHex(uname);*/ + + QChar charTemp; + DWORD size=255; + WCHAR * userNameW=new WCHAR[size]; + if(GetUserNameW(userNameW,&size)) + { + QByteArray tempArray; + userName=QString::fromWCharArray(userNameW,size-1); + int index=0; + while(index<userName.size()) + { + tempArray+=userName.at(index).cell(); + tempArray+=userName.at(index).row(); + index++; + } + userName=tempArray.toHex(); + } + delete userNameW; + return name+"-"+userName.toStdString(); +#endif +} + +// Dump UTF16 (little endian) +char * ExtraSocket::toHex(const char *str) +{ + char *p, *sz; + size_t len; + if (str==NULL) + return NULL; + len= strlen(str); + p = sz = (char *) malloc((len+1)*4); + for (size_t i=0; i<len; i++) + { + sprintf(p, "%.2x00", str[i]); + p+=4; + } + *p=0; + return sz; +} |