diff options
author | Adam <Adam@anope.org> | 2011-11-08 17:29:16 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2011-11-08 17:29:16 -0500 |
commit | b5ff856f47d8e54d12c568462a06351633c29610 (patch) | |
tree | a4e2f96c59ee49aa5e6cacdfd30db6155151ad36 /src/win32/windows.cpp | |
parent | 97b9055f92f21cd91af44a3d5dacce0024536cff (diff) |
Windows
Diffstat (limited to 'src/win32/windows.cpp')
-rw-r--r-- | src/win32/windows.cpp | 104 |
1 files changed, 18 insertions, 86 deletions
diff --git a/src/win32/windows.cpp b/src/win32/windows.cpp index 60edaffbc..139a17736 100644 --- a/src/win32/windows.cpp +++ b/src/win32/windows.cpp @@ -12,13 +12,11 @@ #ifdef _WIN32 #include "services.h" -struct WindowsLanguage +static struct WindowsLanguage { const char *languageName; USHORT windowsLanguageName; -}; - -WindowsLanguage WindowsLanguages[] = { +} WindowsLanguages[] = { {"ca_ES", LANG_CATALAN}, {"de_DE", LANG_GERMAN}, {"el_GR", LANG_GREEK}, @@ -34,7 +32,7 @@ WindowsLanguage WindowsLanguages[] = { {NULL, 0} }; -WSADATA wsa; +static WSADATA wsa; void OnStartup() { @@ -55,87 +53,6 @@ USHORT WindowsGetLanguage(const char *lang) return LANG_NEUTRAL; } -/** This is inet_pton, but it works on Windows - * @param af The protocol type, AF_INET or AF_INET6 - * @param src The address - * @param dst Struct to put results in - * @return 1 on sucess, -1 on error - */ -int inet_pton(int af, const char *src, void *dst) -{ - int address_length; - sockaddr_storage sa; - sockaddr_in *sin = reinterpret_cast<sockaddr_in *>(&sa); - sockaddr_in6 *sin6 = reinterpret_cast<sockaddr_in6 *>(&sa); - - switch (af) - { - case AF_INET: - address_length = sizeof(sockaddr_in); - break; - case AF_INET6: - address_length = sizeof(sockaddr_in6); - break; - default: - return -1; - } - - if (!WSAStringToAddress(static_cast<LPSTR>(const_cast<char *>(src)), af, NULL, reinterpret_cast<LPSOCKADDR>(&sa), &address_length)) - { - switch (af) - { - case AF_INET: - memcpy(dst, &sin->sin_addr, sizeof(in_addr)); - break; - case AF_INET6: - memcpy(dst, &sin6->sin6_addr, sizeof(in6_addr)); - break; - } - return 1; - } - - return 0; -} - -/** This is inet_ntop, but it works on Windows - * @param af The protocol type, AF_INET or AF_INET6 - * @param src Network address structure - * @param dst After converting put it here - * @param size sizeof the dest - * @return dst - */ -const char *inet_ntop(int af, const void *src, char *dst, size_t size) -{ - int address_length; - DWORD string_length = size; - sockaddr_storage sa; - sockaddr_in *sin = reinterpret_cast<sockaddr_in *>(&sa); - sockaddr_in6 *sin6 = reinterpret_cast<sockaddr_in6 *>(&sa); - - memset(&sa, 0, sizeof(sa)); - - switch (af) - { - case AF_INET: - address_length = sizeof(sockaddr_in); - sin->sin_family = af; - memcpy(&sin->sin_addr, src, sizeof(in_addr)); - break; - case AF_INET6: - address_length = sizeof(sockaddr_in6); - sin6->sin6_family = af; - memcpy(&sin6->sin6_addr, src, sizeof(in6_addr)); - break; - default: - return NULL; - } - - if (!WSAAddressToString(reinterpret_cast<LPSOCKADDR>(&sa), address_length, NULL, dst, &string_length)) - return dst; - - return NULL; -} - /** Like gettimeofday(), but it works on Windows. * @param tv A timeval struct * @param tz Should be NULL, it is not used @@ -302,6 +219,16 @@ bool SupportedWindowsVersion() return false; } +int setenv(const char *name, const char *value, int overwrite) +{ + return SetEnvironmentVariable(name, value); +} + +int unsetenv(const char *name) +{ + return SetEnvironmentVariable(name, NULL); +} + int mkstemp(char *input) { input = _mktemp(input); @@ -315,4 +242,9 @@ int mkstemp(char *input) return fd; } +void getcwd(char *buf, size_t sz) +{ + GetCurrentDirectory(sz, buf); +} + #endif |