36 void setenv(
const char *
name,
const char *value,
int overwrite)
38 if (overwrite || NULL == getenv(
name)) {
42 snprintf(
str, strlen(
name) + strlen(value) + 1,
"%s=%s",
name, value);
59 #if NTDDI_VERSION < NTDDI_VISTA
60 const char* inet_ntop(
int af,
const void *
src,
char *
dst, uint32_t
cnt)
64 struct sockaddr_in in;
65 memset(&in, 0,
sizeof(in));
66 in.sin_family = AF_INET;
67 memcpy(&in.sin_addr,
src,
sizeof(
struct in_addr));
68 if (0 == getnameinfo((
struct sockaddr *)&in,
sizeof(
struct sockaddr_in),
dst,
cnt, NULL, 0, NI_NUMERICHOST))
71 else if (
af == AF_INET6)
73 struct sockaddr_in6 in6;
74 memset(&in6, 0,
sizeof(in6));
75 in6.sin6_family = AF_INET6;
76 memcpy(&in6.sin6_addr,
src,
sizeof(
struct in_addr6));
77 if (0 == getnameinfo((
struct sockaddr *)&in6,
sizeof(
struct sockaddr_in6),
dst,
cnt, NULL, 0, NI_NUMERICHOST))
83 int inet_pton(
int af,
const char *
src,
void *
dst)
85 struct addrinfo hints;
86 memset(&hints, 0,
sizeof(
struct addrinfo));
95 }
else if (
af == AF_INET6) {
100 struct addrinfo* result = NULL;
101 if (0 != getaddrinfo(
src, NULL, &hints, &result))
105 if (result->ai_family == AF_INET) {
106 struct sockaddr_in* in = (
struct sockaddr_in*)result->ai_addr;
107 memcpy(
dst, &in->sin_addr, 4);
109 else if (result->ai_family == AF_INET6) {
110 struct sockaddr_in6* in6 = (
struct sockaddr_in6*)result->ai_addr;
111 memcpy(
dst, &in6->sin6_addr, 16);
114 freeaddrinfo(result);
118 freeaddrinfo(result);
142 if (strcmp(mode,
"a") == 0) {
144 }
else if (strcmp(mode,
"w") == 0) {
152 CreateFileA(path, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
153 NULL, append ? OPEN_ALWAYS : CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
154 if (h == INVALID_HANDLE_VALUE) {
155 switch (GetLastError()) {
156 case ERROR_FILE_NOT_FOUND:
157 case ERROR_PATH_NOT_FOUND:
160 case ERROR_ACCESS_DENIED:
161 case ERROR_SHARING_VIOLATION:
162 case ERROR_LOCK_VIOLATION:
165 case ERROR_INVALID_NAME:
166 case ERROR_BAD_PATHNAME:
167 case ERROR_DIRECTORY:
170 case ERROR_FILENAME_EXCED_RANGE:
171 errno = ENAMETOOLONG;
173 case ERROR_TOO_MANY_OPEN_FILES:
176 case ERROR_DISK_FULL:
177 case ERROR_HANDLE_DISK_FULL:
188 int fd = _open_osfhandle((intptr_t)h, _O_TEXT | (append ? _O_APPEND : 0));
194 FILE *fp = _fdopen(fd, mode);