reSIProcate/rutil  9694
WceCompat.cxx
Go to the documentation of this file.
00001 
00002 #include <windows.h>
00003 #include "WceCompat.hxx"
00004 
00005 extern "C" int errno=0;
00006 
00007 static char* messages[] = {
00008 /*0           */    "No error",
00009 /*EPERM       */    "Operation not permitted",
00010 /*ENOENT      */    "No such file or directory",
00011 /*ESRCH       */    "No such process",
00012 /*EINTR       */    "Interrupted system call",
00013 /*EIO         */    "I/O error",
00014 /*ENXIO       */    "No such device or address",
00015 /*E2BIG       */    "Arg list too long",
00016 /*ENOEXEC     */    "Exec format error",
00017 /*EBADF       */    "Bad file descriptor",
00018 /*ECHILD      */    "No child processes",
00019 /*EAGAIN      */    "Resource temporarily unavailable",
00020 /*ENOMEM      */    "Not enough memory",
00021 /*EACCES      */    "Permission denied",
00022 /*EFAULT      */    "Bad address",
00023 /*15          */    "Unknown error",                                            // ENOTBLK "Block device required"
00024 /*EBUSY       */    "Device or resource busy",
00025 /*EEXIST      */    "File exists",
00026 /*EXDEV       */    "Improper link",                                            //         "Cross-device link"
00027 /*ENODEV      */    "No such device",
00028 /*ENOTDIR     */    "Not a directory",
00029 /*EISDIR      */    "Is a directory",
00030 /*EINVAL      */    "Invalid argument",
00031 /*ENFILE      */    "Too many open files in system",
00032 /*EMFILE      */    "Too many open files",
00033 /*ENOTTY      */    "Inappropriate I/O control operation",      //         "Not a character device"
00034 /*26          */    "Unknown error",                                            // ETXTBSY "Text file busy"
00035 /*EFBIG       */    "File too large",
00036 /*ENOSPC      */    "No space left on device",
00037 /*ESPIPE      */    "Invalid seek",                                                     //         "Illegal seek"
00038 /*EROFS       */    "Read-only file system",
00039 /*EMLINK      */    "Too many links",
00040 /*EPIPE       */    "Broken pipe",
00041 /*EDOM        */    "Domain error",                                                     //         "Math arg out of domain of func"
00042 /*ERANGE      */    "Result too large",                                         //         "Math result out of range"
00043 /*35          */    "Unknown error",                                            // ENOMSG  "No message of desired type"
00044 /*EDEADLK     */    "Resource deadlock avoided",                        // EIDRM   "Identifier removed"
00045 /*37          */    "Unknown error",                                            // ECHRNG  "Channel number out of range"
00046 /*ENAMETOOLONG*/    "Filename too long",
00047 /*ENOLCK      */    "No locks available",
00048 /*ENOSYS      */    "Function not implemented",
00049 /*ENOTEMPTY   */    "Directory not empty",
00050 /*EILSEQ      */    "Illegal byte sequence"
00051 };
00052 static const int NUM_MESSAGES = sizeof(messages)/sizeof(messages[0]);
00053 
00054 extern "C" char* __cdecl strerror(int errnum)
00055 {
00056         if (errnum < NUM_MESSAGES)
00057                 return messages[errnum];
00058         return "Unknown error";
00059 }
00060 
00061 //.dcm. wincece lacks this function(actually no time.h)--could port from BSD
00062 // size_t __cdecl strftime (
00063 //         char *string,
00064 //         size_t maxsize,
00065 //         const char *format,
00066 //         const struct tm *timeptr
00067 //         )
00068 // {
00069 //         return (_Strftime(string, maxsize, format, timeptr, 0));
00070 // }
00071   
00072 namespace resip
00073 {
00074 //      *******************************************************************************
00075 
00076 wchar_t* ToWString(const char *str)
00077 {
00078         if (!str) return 0;
00079 
00080         int dCharacters = MultiByteToWideChar( CP_UTF8, 0, str,strlen(str)+1, 0,0);
00081         wchar_t *wszStr = new wchar_t[dCharacters+1];          
00082         MultiByteToWideChar( CP_UTF8, 0, str,-1, wszStr,dCharacters);
00083         return wszStr;
00084 };
00085 
00086 char* FromWString(const wchar_t *wstr)
00087 {
00088         if (!wstr) return 0;
00089 
00090         int dCharacters = WideCharToMultiByte( CP_UTF8, 0, wstr,lstrlen(wstr)+1, 0,0,0,0 );
00091         char *str = new char[dCharacters +1];
00092         WideCharToMultiByte( CP_UTF8, 0, wstr,-1, str,dCharacters ,0,0 );
00093         return str;
00094 };
00095 
00096 void FreeWString(wchar_t* wstr)
00097 {
00098         if (wstr)
00099                 delete wstr;
00100 }
00101 
00102 void FreeString(char* str)
00103 {
00104         if (str)
00105                 delete str;
00106 }
00107 
00108 }