summaryrefslogtreecommitdiffstats
path: root/common/os_calls.c
diff options
context:
space:
mode:
authorLawrenceK <github@lklyne.co.uk>2012-12-04 10:27:21 +0000
committerLawrenceK <github@lklyne.co.uk>2012-12-04 10:27:21 +0000
commitb86a80aca61a9d3bea4f05e77f4d338f8a4eb156 (patch)
tree5b4d3041e6f027b7cc216d840529276470e37c03 /common/os_calls.c
parent9530caa4ffec46bdc7d24c873272d2ba4e85e32b (diff)
parent60322a3a42217954aa066728fcbbea8db90539af (diff)
downloadxrdp-proprietary-b86a80aca61a9d3bea4f05e77f4d338f8a4eb156.tar.gz
xrdp-proprietary-b86a80aca61a9d3bea4f05e77f4d338f8a4eb156.zip
Merge branch 'master' of git://github.com/FreeRDP/xrdp
Diffstat (limited to 'common/os_calls.c')
-rw-r--r--common/os_calls.c2943
1 files changed, 1594 insertions, 1349 deletions
diff --git a/common/os_calls.c b/common/os_calls.c
index 6b55f2f7..c8044cba 100644
--- a/common/os_calls.c
+++ b/common/os_calls.c
@@ -1,28 +1,24 @@
-/*
- Copyright (c) 2004-2012 Jay Sorg
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included
- in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-
- generic operating system calls
-
- put all the os / arch define in here you want
-*/
+/**
+ * xrdp: A Remote Desktop Protocol server.
+ *
+ * Copyright (C) Jay Sorg 2004-2012
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * generic operating system calls
+ *
+ * put all the os / arch define in here you want
+ */
#if defined(HAVE_CONFIG_H)
#include "config_ac.h"
@@ -68,7 +64,7 @@
/* for clearenv() */
#if defined(_WIN32)
#else
-extern char** environ;
+extern char **environ;
#endif
#if defined(__linux__)
@@ -90,77 +86,85 @@ static char g_temp_base_org[128] = "";
int APP_CC
g_rm_temp_dir(void)
{
- if (g_temp_base[0] != 0)
- {
- if (!g_remove_dir(g_temp_base))
+ if (g_temp_base[0] != 0)
{
- printf("g_rm_temp_dir: removing temp directory [%s] failed\n", g_temp_base);
+ if (!g_remove_dir(g_temp_base))
+ {
+ printf("g_rm_temp_dir: removing temp directory [%s] failed\n", g_temp_base);
+ }
+
+ g_temp_base[0] = 0;
}
- g_temp_base[0] = 0;
- }
- return 0;
+
+ return 0;
}
/*****************************************************************************/
int APP_CC
-g_mk_temp_dir(const char* app_name)
+g_mk_temp_dir(const char *app_name)
{
- if (app_name != 0)
- {
- if (app_name[0] != 0)
+ if (app_name != 0)
{
- if (!g_directory_exist("/tmp/.xrdp"))
- {
- if (!g_create_dir("/tmp/.xrdp"))
+ if (app_name[0] != 0)
{
- printf("g_mk_temp_dir: g_create_dir failed\n");
- return 1;
+ if (!g_directory_exist("/tmp/.xrdp"))
+ {
+ if (!g_create_dir("/tmp/.xrdp"))
+ {
+ printf("g_mk_temp_dir: g_create_dir failed\n");
+ return 1;
+ }
+
+ g_chmod_hex("/tmp/.xrdp", 0x1777);
+ }
+
+ snprintf(g_temp_base, sizeof(g_temp_base),
+ "/tmp/.xrdp/%s-XXXXXX", app_name);
+ snprintf(g_temp_base_org, sizeof(g_temp_base_org),
+ "/tmp/.xrdp/%s-XXXXXX", app_name);
+
+ if (mkdtemp(g_temp_base) == 0)
+ {
+ printf("g_mk_temp_dir: mkdtemp failed [%s]\n", g_temp_base);
+ return 1;
+ }
+ }
+ else
+ {
+ printf("g_mk_temp_dir: bad app name\n");
+ return 1;
}
- g_chmod_hex("/tmp/.xrdp", 0x1777);
- }
- snprintf(g_temp_base, sizeof(g_temp_base),
- "/tmp/.xrdp/%s-XXXXXX", app_name);
- snprintf(g_temp_base_org, sizeof(g_temp_base_org),
- "/tmp/.xrdp/%s-XXXXXX", app_name);
- if (mkdtemp(g_temp_base) == 0)
- {
- printf("g_mk_temp_dir: mkdtemp failed [%s]\n", g_temp_base);
- return 1;
- }
}
else
{
- printf("g_mk_temp_dir: bad app name\n");
- return 1;
- }
- }
- else
- {
- if (g_temp_base_org[0] == 0)
- {
- printf("g_mk_temp_dir: g_temp_base_org not set\n");
- return 1;
- }
- g_strncpy(g_temp_base, g_temp_base_org, 127);
- if (mkdtemp(g_temp_base) == 0)
- {
- printf("g_mk_temp_dir: mkdtemp failed [%s]\n", g_temp_base);
+ if (g_temp_base_org[0] == 0)
+ {
+ printf("g_mk_temp_dir: g_temp_base_org not set\n");
+ return 1;
+ }
+
+ g_strncpy(g_temp_base, g_temp_base_org, 127);
+
+ if (mkdtemp(g_temp_base) == 0)
+ {
+ printf("g_mk_temp_dir: mkdtemp failed [%s]\n", g_temp_base);
+ }
}
- }
- return 0;
+
+ return 0;
}
/*****************************************************************************/
void APP_CC
-g_init(const char* app_name)
+g_init(const char *app_name)
{
#if defined(_WIN32)
- WSADATA wsadata;
+ WSADATA wsadata;
- WSAStartup(2, &wsadata);
+ WSAStartup(2, &wsadata);
#endif
- setlocale(LC_CTYPE, "");
- g_mk_temp_dir(app_name);
+ setlocale(LC_CTYPE, "");
+ g_mk_temp_dir(app_name);
}
/*****************************************************************************/
@@ -168,160 +172,168 @@ void APP_CC
g_deinit(void)
{
#if defined(_WIN32)
- WSACleanup();
+ WSACleanup();
#endif
- g_rm_temp_dir();
+ g_rm_temp_dir();
}
/*****************************************************************************/
/* allocate memory, returns a pointer to it, size bytes are allocated,
if zero is non zero, each byte will be set to zero */
-void* APP_CC
+void *APP_CC
g_malloc(int size, int zero)
{
- char* rv;
+ char *rv;
+
+ rv = (char *)malloc(size);
- rv = (char*)malloc(size);
- if (zero)
- {
- if (rv != 0)
+ if (zero)
{
- memset(rv, 0, size);
+ if (rv != 0)
+ {
+ memset(rv, 0, size);
+ }
}
- }
- return rv;
+
+ return rv;
}
/*****************************************************************************/
/* free the memory pointed to by ptr, ptr can be zero */
void APP_CC
-g_free(void* ptr)
+g_free(void *ptr)
{
- if (ptr != 0)
- {
- free(ptr);
- }
+ if (ptr != 0)
+ {
+ free(ptr);
+ }
}
/*****************************************************************************/
/* output text to stdout, try to use g_write / g_writeln instead to avoid
linux / windows EOL problems */
void DEFAULT_CC
-g_printf(const char* format, ...)
+g_printf(const char *format, ...)
{
- va_list ap;
+ va_list ap;
- va_start(ap, format);
- vfprintf(stdout, format, ap);
- va_end(ap);
+ va_start(ap, format);
+ vfprintf(stdout, format, ap);
+ va_end(ap);
}
/*****************************************************************************/
void DEFAULT_CC
-g_sprintf(char* dest, const char* format, ...)
+g_sprintf(char *dest, const char *format, ...)
{
- va_list ap;
+ va_list ap;
- va_start(ap, format);
- vsprintf(dest, format, ap);
- va_end(ap);
+ va_start(ap, format);
+ vsprintf(dest, format, ap);
+ va_end(ap);
}
/*****************************************************************************/
void DEFAULT_CC
-g_snprintf(char* dest, int len, const char* format, ...)
+g_snprintf(char *dest, int len, const char *format, ...)
{
- va_list ap;
+ va_list ap;
- va_start(ap, format);
- vsnprintf(dest, len, format, ap);
- va_end(ap);
+ va_start(ap, format);
+ vsnprintf(dest, len, format, ap);
+ va_end(ap);
}
/*****************************************************************************/
void DEFAULT_CC
-g_writeln(const char* format, ...)
+g_writeln(const char *format, ...)
{
- va_list ap;
+ va_list ap;
- va_start(ap, format);
- vfprintf(stdout, format, ap);
- va_end(ap);
+ va_start(ap, format);
+ vfprintf(stdout, format, ap);
+ va_end(ap);
#if defined(_WIN32)
- g_printf("\r\n");
+ g_printf("\r\n");
#else
- g_printf("\n");
+ g_printf("\n");
#endif
}
/*****************************************************************************/
void DEFAULT_CC
-g_write(const char* format, ...)
+g_write(const char *format, ...)
{
- va_list ap;
+ va_list ap;
- va_start(ap, format);
- vfprintf(stdout, format, ap);
- va_end(ap);
+ va_start(ap, format);
+ vfprintf(stdout, format, ap);
+ va_end(ap);
}
/*****************************************************************************/
/* produce a hex dump */
void APP_CC
-g_hexdump(char* p, int len)
+g_hexdump(char *p, int len)
{
- unsigned char* line;
- int i;
- int thisline;
- int offset;
+ unsigned char *line;
+ int i;
+ int thisline;
+ int offset;
- line = (unsigned char*)p;
- offset = 0;
- while (offset < len)
- {
- g_printf("%04x ", offset);
- thisline = len - offset;
- if (thisline > 16)
- {
- thisline = 16;
- }
- for (i = 0; i < thisline; i++)
- {
- g_printf("%02x ", line[i]);
- }
- for (; i < 16; i++)
- {
- g_printf(" ");
- }
- for (i = 0; i < thisline; i++)
+ line = (unsigned char *)p;
+ offset = 0;
+
+ while (offset < len)
{
- g_printf("%c", (line[i] >= 0x20 && line[i] < 0x7f) ? line[i] : '.');
+ g_printf("%04x ", offset);
+ thisline = len - offset;
+
+ if (thisline > 16)
+ {
+ thisline = 16;
+ }
+
+ for (i = 0; i < thisline; i++)
+ {
+ g_printf("%02x ", line[i]);
+ }
+
+ for (; i < 16; i++)
+ {
+ g_printf(" ");
+ }
+
+ for (i = 0; i < thisline; i++)
+ {
+ g_printf("%c", (line[i] >= 0x20 && line[i] < 0x7f) ? line[i] : '.');
+ }
+
+ g_writeln("");
+ offset += thisline;
+ line += thisline;
}
- g_writeln("");
- offset += thisline;
- line += thisline;
- }
}
/*****************************************************************************/
void APP_CC
-g_memset(void* ptr, int val, int size)
+g_memset(void *ptr, int val, int size)
{
- memset(ptr, val, size);
+ memset(ptr, val, size);
}
/*****************************************************************************/
void APP_CC
-g_memcpy(void* d_ptr, const void* s_ptr, int size)
+g_memcpy(void *d_ptr, const void *s_ptr, int size)
{
- memcpy(d_ptr, s_ptr, size);
+ memcpy(d_ptr, s_ptr, size);
}
/*****************************************************************************/
int APP_CC
g_getchar(void)
{
- return getchar();
+ return getchar();
}
/*****************************************************************************/
@@ -329,40 +341,43 @@ g_getchar(void)
int APP_CC
g_tcp_set_no_delay(int sck)
{
- int ret = 1; /* error */
+ int ret = 1; /* error */
#if defined(_WIN32)
- int option_value;
- int option_len;
+ int option_value;
+ int option_len;
#else
- int option_value;
- unsigned int option_len;
+ int option_value;
+ unsigned int option_len;
#endif
- option_len = sizeof(option_value);
- /* SOL_TCP IPPROTO_TCP */
- if (getsockopt(sck, IPPROTO_TCP, TCP_NODELAY, (char*)&option_value,
- &option_len) == 0)
- {
- if (option_value == 0)
+ option_len = sizeof(option_value);
+
+ /* SOL_TCP IPPROTO_TCP */
+ if (getsockopt(sck, IPPROTO_TCP, TCP_NODELAY, (char *)&option_value,
+ &option_len) == 0)
+ {
+ if (option_value == 0)
+ {
+ option_value = 1;
+ option_len = sizeof(option_value);
+
+ if (setsockopt(sck, IPPROTO_TCP, TCP_NODELAY, (char *)&option_value,
+ option_len) == 0)
+ {
+ ret = 0; /* success */
+ }
+ else
+ {
+ g_writeln("Error setting tcp_nodelay");
+ }
+ }
+ }
+ else
{
- option_value = 1;
- option_len = sizeof(option_value);
- if (setsockopt(sck, IPPROTO_TCP, TCP_NODELAY, (char*)&option_value,
- option_len) == 0)
- {
- ret = 0; /* success */
- }
- else
- {
- g_writeln("Error setting tcp_nodelay");
- }
+ g_writeln("Error getting tcp_nodelay");
}
- }
- else
- {
- g_writeln("Error getting tcp_nodelay");
- }
- return ret;
+
+ return ret;
}
/*****************************************************************************/
@@ -370,40 +385,43 @@ g_tcp_set_no_delay(int sck)
int APP_CC
g_tcp_set_keepalive(int sck)
{
- int ret = 1; /* error */
+ int ret = 1; /* error */
#if defined(_WIN32)
- int option_value;
- int option_len;
+ int option_value;
+ int option_len;
#else
- int option_value;
- unsigned int option_len;
+ int option_value;
+ unsigned int option_len;
#endif
- option_len = sizeof(option_value);
- /* SOL_TCP IPPROTO_TCP */
- if (getsockopt(sck, SOL_SOCKET, SO_KEEPALIVE, (char*)&option_value,
- &option_len) == 0)
- {
- if (option_value == 0)
+ option_len = sizeof(option_value);
+
+ /* SOL_TCP IPPROTO_TCP */
+ if (getsockopt(sck, SOL_SOCKET, SO_KEEPALIVE, (char *)&option_value,
+ &option_len) == 0)
+ {
+ if (option_value == 0)
+ {
+ option_value = 1;
+ option_len = sizeof(option_value);
+
+ if (setsockopt(sck, SOL_SOCKET, SO_KEEPALIVE, (char *)&option_value,
+ option_len) == 0)
+ {
+ ret = 0; /* success */
+ }
+ else
+ {
+ g_writeln("Error setting tcp_keepalive");
+ }
+ }
+ }
+ else
{
- option_value = 1;
- option_len = sizeof(option_value);
- if (setsockopt(sck, SOL_SOCKET, SO_KEEPALIVE, (char*)&option_value,
- option_len) == 0)
- {
- ret = 0; /* success */
- }
- else
- {
- g_writeln("Error setting tcp_keepalive");
- }
+ g_writeln("Error getting tcp_keepalive");
}
- }
- else
- {
- g_writeln("Error getting tcp_keepalive");
- }
- return ret;
+
+ return ret;
}
/*****************************************************************************/
@@ -412,46 +430,52 @@ int APP_CC
g_tcp_socket(void)
{
#if defined(_WIN32)
- int rv;
- int option_value;
- int option_len;
+ int rv;
+ int option_value;
+ int option_len;
#else
- int rv;
- int option_value;
- unsigned int option_len;
+ int rv;
+ int option_value;
+ unsigned int option_len;
#endif
- /* in win32 a socket is an unsigned int, in linux, its an int */
- rv = (int)socket(PF_INET, SOCK_STREAM, 0);
- if (rv < 0)
- {
- return -1;
- }
- option_len = sizeof(option_value);
- if (getsockopt(rv, SOL_SOCKET, SO_REUSEADDR, (char*)&option_value,
- &option_len) == 0)
- {
- if (option_value == 0)
+ /* in win32 a socket is an unsigned int, in linux, its an int */
+ rv = (int)socket(PF_INET, SOCK_STREAM, 0);
+
+ if (rv < 0)
{
- option_value = 1;
- option_len = sizeof(option_value);
- setsockopt(rv, SOL_SOCKET, SO_REUSEADDR, (char*)&option_value,
- option_len);
+ return -1;
}
- }
- option_len = sizeof(option_value);
- if (getsockopt(rv, SOL_SOCKET, SO_SNDBUF, (char*)&option_value,
- &option_len) == 0)
- {
- if (option_value < (1024 * 32))
+
+ option_len = sizeof(option_value);
+
+ if (getsockopt(rv, SOL_SOCKET, SO_REUSEADDR, (char *)&option_value,
+ &option_len) == 0)
{
- option_value = 1024 * 32;
- option_len = sizeof(option_value);
- setsockopt(rv, SOL_SOCKET, SO_SNDBUF, (char*)&option_value,
- option_len);
+ if (option_value == 0)
+ {
+ option_value = 1;
+ option_len = sizeof(option_value);
+ setsockopt(rv, SOL_SOCKET, SO_REUSEADDR, (char *)&option_value,
+ option_len);
+ }
+ }
+
+ option_len = sizeof(option_value);
+
+ if (getsockopt(rv, SOL_SOCKET, SO_SNDBUF, (char *)&option_value,
+ &option_len) == 0)
+ {
+ if (option_value < (1024 * 32))
+ {
+ option_value = 1024 * 32;
+ option_len = sizeof(option_value);
+ setsockopt(rv, SOL_SOCKET, SO_SNDBUF, (char *)&option_value,
+ option_len);
+ }
}
- }
- return rv;
+
+ return rv;
}
/*****************************************************************************/
@@ -459,9 +483,9 @@ int APP_CC
g_tcp_local_socket(void)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- return socket(PF_LOCAL, SOCK_STREAM, 0);
+ return socket(PF_LOCAL, SOCK_STREAM, 0);
#endif
}
@@ -469,63 +493,67 @@ g_tcp_local_socket(void)
void APP_CC
g_tcp_close(int sck)
{
- if (sck == 0)
- {
- return;
- }
+ if (sck == 0)
+ {
+ return;
+ }
+
#if defined(_WIN32)
- closesocket(sck);
+ closesocket(sck);
#else
- close(sck);
+ close(sck);
#endif
}
/*****************************************************************************/
/* returns error, zero is good */
int APP_CC
-g_tcp_connect(int sck, const char* address, const char* port)
+g_tcp_connect(int sck, const char *address, const char *port)
{
- struct sockaddr_in s;
- struct hostent* h;
+ struct sockaddr_in s;
+ struct hostent *h;
+
+ g_memset(&s, 0, sizeof(struct sockaddr_in));
+ s.sin_family = AF_INET;
+ s.sin_port = htons((tui16)atoi(port));
+ s.sin_addr.s_addr = inet_addr(address);
- g_memset(&s, 0, sizeof(struct sockaddr_in));
- s.sin_family = AF_INET;
- s.sin_port = htons((tui16)atoi(port));
- s.sin_addr.s_addr = inet_addr(address);
- if (s.sin_addr.s_addr == INADDR_NONE)
- {
- h = gethostbyname(address);
- if (h != 0)
+ if (s.sin_addr.s_addr == INADDR_NONE)
{
- if (h->h_name != 0)
- {
- if (h->h_addr_list != 0)
+ h = gethostbyname(address);
+
+ if (h != 0)
{
- if ((*(h->h_addr_list)) != 0)
- {
- s.sin_addr.s_addr = *((int*)(*(h->h_addr_list)));
- }
+ if (h->h_name != 0)
+ {
+ if (h->h_addr_list != 0)
+ {
+ if ((*(h->h_addr_list)) != 0)
+ {
+ s.sin_addr.s_addr = *((int *)(*(h->h_addr_list)));
+ }
+ }
+ }
}
- }
}
- }
- return connect(sck, (struct sockaddr*)&s, sizeof(struct sockaddr_in));
+
+ return connect(sck, (struct sockaddr *)&s, sizeof(struct sockaddr_in));
}
/*****************************************************************************/
/* returns error, zero is good */
int APP_CC
-g_tcp_local_connect(int sck, const char* port)
+g_tcp_local_connect(int sck, const char *port)
{
#if defined(_WIN32)
- return -1;
+ return -1;
#else
- struct sockaddr_un s;
+ struct sockaddr_un s;
- memset(&s, 0, sizeof(struct sockaddr_un));
- s.sun_family = AF_UNIX;
- strcpy(s.sun_path, port);
- return connect(sck, (struct sockaddr*)&s, sizeof(struct sockaddr_un));
+ memset(&s, 0, sizeof(struct sockaddr_un));
+ s.sun_family = AF_UNIX;
+ strcpy(s.sun_path, port);
+ return connect(sck, (struct sockaddr *)&s, sizeof(struct sockaddr_un));
#endif
}
@@ -533,65 +561,67 @@ g_tcp_local_connect(int sck, const char* port)
int APP_CC
g_tcp_set_non_blocking(int sck)
{
- unsigned long i;
+ unsigned long i;
#if defined(_WIN32)
- i = 1;
- ioctlsocket(sck, FIONBIO, &i);
+ i = 1;
+ ioctlsocket(sck, FIONBIO, &i);
#else
- i = fcntl(sck, F_GETFL);
- i = i | O_NONBLOCK;
- fcntl(sck, F_SETFL, i);
+ i = fcntl(sck, F_GETFL);
+ i = i | O_NONBLOCK;
+ fcntl(sck, F_SETFL, i);
#endif
- return 0;
+ return 0;
}
/*****************************************************************************/
/* returns error, zero is good */
int APP_CC
-g_tcp_bind(int sck, char* port)
+g_tcp_bind(int sck, char *port)
{
- struct sockaddr_in s;
+ struct sockaddr_in s;
- memset(&s, 0, sizeof(struct sockaddr_in));
- s.sin_family = AF_INET;
- s.sin_port = htons((tui16)atoi(port));
- s.sin_addr.s_addr = INADDR_ANY;
- return bind(sck, (struct sockaddr*)&s, sizeof(struct sockaddr_in));
+ memset(&s, 0, sizeof(struct sockaddr_in));
+ s.sin_family = AF_INET;
+ s.sin_port = htons((tui16)atoi(port));
+ s.sin_addr.s_addr = INADDR_ANY;
+ return bind(sck, (struct sockaddr *)&s, sizeof(struct sockaddr_in));
}
/*****************************************************************************/
int APP_CC
-g_tcp_local_bind(int sck, char* port)
+g_tcp_local_bind(int sck, char *port)
{
#if defined(_WIN32)
- return -1;
+ return -1;
#else
- struct sockaddr_un s;
+ struct sockaddr_un s;
- memset(&s, 0, sizeof(struct sockaddr_un));
- s.sun_family = AF_UNIX;
- strcpy(s.sun_path, port);
- return bind(sck, (struct sockaddr*)&s, sizeof(struct sockaddr_un));
+ memset(&s, 0, sizeof(struct sockaddr_un));
+ s.sun_family = AF_UNIX;
+ strcpy(s.sun_path, port);
+ return bind(sck, (struct sockaddr *)&s, sizeof(struct sockaddr_un));
#endif
}
/*****************************************************************************/
/* returns error, zero is good */
int APP_CC
-g_tcp_bind_address(int sck, char* port, const char* address)
+g_tcp_bind_address(int sck, char *port, const char *address)
{
- struct sockaddr_in s;
+ struct sockaddr_in s;
+
+ memset(&s, 0, sizeof(struct sockaddr_in));
+ s.sin_family = AF_INET;
+ s.sin_port = htons((tui16)atoi(port));
+ s.sin_addr.s_addr = INADDR_ANY;
+
+ if (inet_aton(address, &s.sin_addr) < 0)
+ {
+ return -1; /* bad address */
+ }
- memset(&s, 0, sizeof(struct sockaddr_in));
- s.sin_family = AF_INET;
- s.sin_port = htons((tui16)atoi(port));
- s.sin_addr.s_addr = INADDR_ANY;
- if (inet_aton(address, &s.sin_addr) < 0)
- {
- return -1; /* bad address */
- }
- return bind(sck, (struct sockaddr*)&s, sizeof(struct sockaddr_in));
+ return bind(sck, (struct sockaddr *)&s, sizeof(struct sockaddr_in));
}
/*****************************************************************************/
@@ -599,58 +629,61 @@ g_tcp_bind_address(int sck, char* port, const char* address)
int APP_CC
g_tcp_listen(int sck)
{
- return listen(sck, 2);
+ return listen(sck, 2);
}
/*****************************************************************************/
int APP_CC
g_tcp_accept(int sck)
{
- struct sockaddr_in s;
+ struct sockaddr_in s;
#if defined(_WIN32)
- signed int i;
+ signed int i;
#else
- unsigned int i;
+ unsigned int i;
#endif
- i = sizeof(struct sockaddr_in);
- memset(&s, 0, i);
- return accept(sck, (struct sockaddr*)&s, &i);
+ i = sizeof(struct sockaddr_in);
+ memset(&s, 0, i);
+ return accept(sck, (struct sockaddr *)&s, &i);
}
/*****************************************************************************/
void APP_CC
-g_write_ip_address(int rcv_sck, char* ip_address, int bytes)
+g_write_ip_address(int rcv_sck, char *ip_address, int bytes)
{
- struct sockaddr_in s;
- struct in_addr in;
+ struct sockaddr_in s;
+ struct in_addr in;
#if defined(_WIN32)
- int len;
+ int len;
#else
- unsigned int len;
+ unsigned int len;
#endif
- int ip_port;
- int ok;
+ int ip_port;
+ int ok;
+
+ ok = 0;
+ memset(&s, 0, sizeof(s));
+ len = sizeof(s);
+
+ if (getpeername(rcv_sck, (struct sockaddr *)&s, &len) == 0)
+ {
+ memset(&in, 0, sizeof(in));
+ in.s_addr = s.sin_addr.s_addr;
+ ip_port = ntohs(s.sin_port);
+
+ if (ip_port != 0)
+ {
+ ok = 1;
+ snprintf(ip_address, bytes, "%s:%d - socket: %d", inet_ntoa(in),
+ ip_port, rcv_sck);
+ }
+ }
- ok = 0;
- memset(&s, 0, sizeof(s));
- len = sizeof(s);
- if (getpeername(rcv_sck,(struct sockaddr*)&s, &len) == 0)
- {
- memset(&in, 0, sizeof(in));
- in.s_addr = s.sin_addr.s_addr;
- ip_port = ntohs(s.sin_port);
- if (ip_port != 0)
+ if (!ok)
{
- ok = 1;
- snprintf(ip_address, bytes, "%s:%d - socket: %d", inet_ntoa(in),
- ip_port, rcv_sck);
+ snprintf(ip_address, bytes, "NULL:NULL - socket: %d", rcv_sck);
}
- }
- if (!ok)
- {
- snprintf(ip_address, bytes, "NULL:NULL - socket: %d", rcv_sck);
- }
}
/*****************************************************************************/
@@ -658,9 +691,9 @@ void APP_CC
g_sleep(int msecs)
{
#if defined(_WIN32)
- Sleep(msecs);
+ Sleep(msecs);
#else
- usleep(msecs * 1000);
+ usleep(msecs * 1000);
#endif
}
@@ -669,31 +702,31 @@ int APP_CC
g_tcp_last_error_would_block(int sck)
{
#if defined(_WIN32)
- return WSAGetLastError() == WSAEWOULDBLOCK;
+ return WSAGetLastError() == WSAEWOULDBLOCK;
#else
- return (errno == EWOULDBLOCK) || (errno == EAGAIN) || (errno == EINPROGRESS);
+ return (errno == EWOULDBLOCK) || (errno == EAGAIN) || (errno == EINPROGRESS);
#endif
}
/*****************************************************************************/
int APP_CC
-g_tcp_recv(int sck, void* ptr, int len, int flags)
+g_tcp_recv(int sck, void *ptr, int len, int flags)
{
#if defined(_WIN32)
- return recv(sck, (char*)ptr, len, flags);
+ return recv(sck, (char *)ptr, len, flags);
#else
- return recv(sck, ptr, len, flags);
+ return recv(sck, ptr, len, flags);
#endif
}
/*****************************************************************************/
int APP_CC
-g_tcp_send(int sck, const void* ptr, int len, int flags)
+g_tcp_send(int sck, const void *ptr, int len, int flags)
{
#if defined(_WIN32)
- return send(sck, (const char*)ptr, len, flags);
+ return send(sck, (const char *)ptr, len, flags);
#else
- return send(sck, ptr, len, flags);
+ return send(sck, ptr, len, flags);
#endif
}
@@ -703,22 +736,24 @@ int APP_CC
g_tcp_socket_ok(int sck)
{
#if defined(_WIN32)
- int opt;
- int opt_len;
+ int opt;
+ int opt_len;
#else
- int opt;
- unsigned int opt_len;
+ int opt;
+ unsigned int opt_len;
#endif
- opt_len = sizeof(opt);
- if (getsockopt(sck, SOL_SOCKET, SO_ERROR, (char*)(&opt), &opt_len) == 0)
- {
- if (opt == 0)
+ opt_len = sizeof(opt);
+
+ if (getsockopt(sck, SOL_SOCKET, SO_ERROR, (char *)(&opt), &opt_len) == 0)
{
- return 1;
+ if (opt == 0)
+ {
+ return 1;
+ }
}
- }
- return 0;
+
+ return 0;
}
/*****************************************************************************/
@@ -727,23 +762,26 @@ g_tcp_socket_ok(int sck)
int APP_CC
g_tcp_can_send(int sck, int millis)
{
- fd_set wfds;
- struct timeval time;
- int rv;
-
- time.tv_sec = millis / 1000;
- time.tv_usec = (millis * 1000) % 1000000;
- FD_ZERO(&wfds);
- if (sck > 0)
- {
- FD_SET(((unsigned int)sck), &wfds);
- rv = select(sck + 1, 0, &wfds, 0, &time);
- if (rv > 0)
+ fd_set wfds;
+ struct timeval time;
+ int rv;
+
+ time.tv_sec = millis / 1000;
+ time.tv_usec = (millis * 1000) % 1000000;
+ FD_ZERO(&wfds);
+
+ if (sck > 0)
{
- return g_tcp_socket_ok(sck);
+ FD_SET(((unsigned int)sck), &wfds);
+ rv = select(sck + 1, 0, &wfds, 0, &time);
+
+ if (rv > 0)
+ {
+ return g_tcp_socket_ok(sck);
+ }
}
- }
- return 0;
+
+ return 0;
}
/*****************************************************************************/
@@ -752,144 +790,166 @@ g_tcp_can_send(int sck, int millis)
int APP_CC
g_tcp_can_recv(int sck, int millis)
{
- fd_set rfds;
- struct timeval time;
- int rv;
-
- time.tv_sec = millis / 1000;
- time.tv_usec = (millis * 1000) % 1000000;
- FD_ZERO(&rfds);
- if (sck > 0)
- {
- FD_SET(((unsigned int)sck), &rfds);
- rv = select(sck + 1, &rfds, 0, 0, &time);
- if (rv > 0)
+ fd_set rfds;
+ struct timeval time;
+ int rv;
+
+ time.tv_sec = millis / 1000;
+ time.tv_usec = (millis * 1000) % 1000000;
+ FD_ZERO(&rfds);
+
+ if (sck > 0)
{
- return g_tcp_socket_ok(sck);
+ FD_SET(((unsigned int)sck), &rfds);
+ rv = select(sck + 1, &rfds, 0, 0, &time);
+
+ if (rv > 0)
+ {
+ return g_tcp_socket_ok(sck);
+ }
}
- }
- return 0;
+
+ return 0;
}
/*****************************************************************************/
int APP_CC
g_tcp_select(int sck1, int sck2)
{
- fd_set rfds;
- struct timeval time;
- int max = 0;
- int rv = 0;
-
- g_memset(&rfds,0,sizeof(fd_set));
- g_memset(&time,0,sizeof(struct timeval));
-
- time.tv_sec = 0;
- time.tv_usec = 0;
- FD_ZERO(&rfds);
- if (sck1 > 0)
- {
- FD_SET(((unsigned int)sck1), &rfds);
- }
- if (sck2 > 0)
- {
- FD_SET(((unsigned int)sck2), &rfds);
- }
- max = sck1;
- if (sck2 > max)
- {
- max = sck2;
- }
- rv = select(max + 1, &rfds, 0, 0, &time);
- if (rv > 0)
- {
- rv = 0;
- if (FD_ISSET(((unsigned int)sck1), &rfds))
+ fd_set rfds;
+ struct timeval time;
+ int max = 0;
+ int rv = 0;
+
+ g_memset(&rfds, 0, sizeof(fd_set));
+ g_memset(&time, 0, sizeof(struct timeval));
+
+ time.tv_sec = 0;
+ time.tv_usec = 0;
+ FD_ZERO(&rfds);
+
+ if (sck1 > 0)
{
- rv = rv | 1;
+ FD_SET(((unsigned int)sck1), &rfds);
}
- if (FD_ISSET(((unsigned int)sck2), &rfds))
+
+ if (sck2 > 0)
{
- rv = rv | 2;
+ FD_SET(((unsigned int)sck2), &rfds);
}
- }
- else
- {
- rv = 0;
- }
- return rv;
+
+ max = sck1;
+
+ if (sck2 > max)
+ {
+ max = sck2;
+ }
+
+ rv = select(max + 1, &rfds, 0, 0, &time);
+
+ if (rv > 0)
+ {
+ rv = 0;
+
+ if (FD_ISSET(((unsigned int)sck1), &rfds))
+ {
+ rv = rv | 1;
+ }
+
+ if (FD_ISSET(((unsigned int)sck2), &rfds))
+ {
+ rv = rv | 2;
+ }
+ }
+ else
+ {
+ rv = 0;
+ }
+
+ return rv;
}
/*****************************************************************************/
/* returns 0 on error */
tbus APP_CC
-g_create_wait_obj(char* name)
+g_create_wait_obj(char *name)
{
#ifdef _WIN32
- tbus obj;
+ tbus obj;
- obj = (tbus)CreateEvent(0, 1, 0, name);
- return obj;
+ obj = (tbus)CreateEvent(0, 1, 0, name);
+ return obj;
#else
- tbus obj;
- struct sockaddr_un sa;
- size_t len;
- tbus sck;
- int i;
- int safety;
- int unnamed;
+ tbus obj;
+ struct sockaddr_un sa;
+ size_t len;
+ tbus sck;
+ int i;
+ int safety;
+ int unnamed;
- if (g_temp_base[0] == 0)
- {
- return 0;
- }
- sck = socket(PF_UNIX, SOCK_DGRAM, 0);
- if (sck < 0)
- {
- return 0;
- }
- safety = 0;
- g_memset(&sa, 0, sizeof(sa));
- sa.sun_family = AF_UNIX;
- unnamed = 1;
- if (name != 0)
- {
- if (name[0] != 0)
- {
- unnamed = 0;
- }
- }
- if (unnamed)
- {
- do
- {
- if (safety > 100)
- {
- break;
- }
- safety++;
- g_random((char*)&i, sizeof(i));
- len = sizeof(sa.sun_path);
- g_snprintf(sa.sun_path, len, "%s/auto_%8.8x", g_temp_base, i);
- len = sizeof(sa);
- } while (bind(sck, (struct sockaddr*)&sa, len) < 0);
- }
- else
- {
- do
- {
- if (safety > 100)
- {
- break;
- }
- safety++;
- g_random((char*)&i, sizeof(i));
- len = sizeof(sa.sun_path);
- g_snprintf(sa.sun_path, len, "%s/%s_%8.8x", g_temp_base, name, i);
- len = sizeof(sa);
- } while (bind(sck, (struct sockaddr*)&sa, len) < 0);
- }
- obj = (tbus)sck;
- return obj;
+ if (g_temp_base[0] == 0)
+ {
+ return 0;
+ }
+
+ sck = socket(PF_UNIX, SOCK_DGRAM, 0);
+
+ if (sck < 0)
+ {
+ return 0;
+ }
+
+ safety = 0;
+ g_memset(&sa, 0, sizeof(sa));
+ sa.sun_family = AF_UNIX;
+ unnamed = 1;
+
+ if (name != 0)
+ {
+ if (name[0] != 0)
+ {
+ unnamed = 0;
+ }
+ }
+
+ if (unnamed)
+ {
+ do
+ {
+ if (safety > 100)
+ {
+ break;
+ }
+
+ safety++;
+ g_random((char *)&i, sizeof(i));
+ len = sizeof(sa.sun_path);
+ g_snprintf(sa.sun_path, len, "%s/auto_%8.8x", g_temp_base, i);
+ len = sizeof(sa);
+ }
+ while (bind(sck, (struct sockaddr *)&sa, len) < 0);
+ }
+ else
+ {
+ do
+ {
+ if (safety > 100)
+ {
+ break;
+ }
+
+ safety++;
+ g_random((char *)&i, sizeof(i));
+ len = sizeof(sa.sun_path);
+ g_snprintf(sa.sun_path, len, "%s/%s_%8.8x", g_temp_base, name, i);
+ len = sizeof(sa);
+ }
+ while (bind(sck, (struct sockaddr *)&sa, len) < 0);
+ }
+
+ obj = (tbus)sck;
+ return obj;
#endif
}
@@ -899,24 +959,26 @@ tbus APP_CC
g_create_wait_obj_from_socket(tbus socket, int write)
{
#ifdef _WIN32
- /* Create and return corresponding event handle for WaitForMultipleObjets */
- WSAEVENT event;
- long lnetevent = 0;
-
- g_memset(&event,0,sizeof(WSAEVENT));
-
- event = WSACreateEvent();
- lnetevent = (write ? FD_WRITE : FD_READ) | FD_CLOSE;
- if (WSAEventSelect(socket, event, lnetevent) == 0)
- {
- return (tbus)event;
- }
- else
- {
- return 0;
- }
+ /* Create and return corresponding event handle for WaitForMultipleObjets */
+ WSAEVENT event;
+ long lnetevent = 0;
+
+ g_memset(&event, 0, sizeof(WSAEVENT));
+
+ event = WSACreateEvent();
+ lnetevent = (write ? FD_WRITE : FD_READ) | FD_CLOSE;
+
+ if (WSAEventSelect(socket, event, lnetevent) == 0)
+ {
+ return (tbus)event;
+ }
+ else
+ {
+ return 0;
+ }
+
#else
- return socket;
+ return socket;
#endif
}
@@ -925,11 +987,13 @@ void APP_CC
g_delete_wait_obj_from_socket(tbus wait_obj)
{
#ifdef _WIN32
- if (wait_obj == 0)
- {
- return;
- }
- WSACloseEvent((HANDLE)wait_obj);
+
+ if (wait_obj == 0)
+ {
+ return;
+ }
+
+ WSACloseEvent((HANDLE)wait_obj);
#else
#endif
}
@@ -940,39 +1004,47 @@ int APP_CC
g_set_wait_obj(tbus obj)
{
#ifdef _WIN32
- if (obj == 0)
- {
+
+ if (obj == 0)
+ {
+ return 0;
+ }
+
+ SetEvent((HANDLE)obj);
return 0;
- }
- SetEvent((HANDLE)obj);
- return 0;
#else
- socklen_t sa_size;
- int s;
- struct sockaddr_un sa;
+ socklen_t sa_size;
+ int s;
+ struct sockaddr_un sa;
- if (obj == 0)
- {
- return 0;
- }
- if (g_tcp_can_recv((int)obj, 0))
- {
- /* already signalled */
+ if (obj == 0)
+ {
+ return 0;
+ }
+
+ if (g_tcp_can_recv((int)obj, 0))
+ {
+ /* already signalled */
+ return 0;
+ }
+
+ sa_size = sizeof(sa);
+
+ if (getsockname((int)obj, (struct sockaddr *)&sa, &sa_size) < 0)
+ {
+ return 1;
+ }
+
+ s = socket(PF_UNIX, SOCK_DGRAM, 0);
+
+ if (s < 0)
+ {
+ return 1;
+ }
+
+ sendto(s, "sig", 4, 0, (struct sockaddr *)&sa, sa_size);
+ close(s);
return 0;
- }
- sa_size = sizeof(sa);
- if (getsockname((int)obj, (struct sockaddr*)&sa, &sa_size) < 0)
- {
- return 1;
- }
- s = socket(PF_UNIX, SOCK_DGRAM, 0);
- if (s < 0)
- {
- return 1;
- }
- sendto(s, "sig", 4, 0, (struct sockaddr*)&sa, sa_size);
- close(s);
- return 0;
#endif
}
@@ -982,24 +1054,28 @@ int APP_CC
g_reset_wait_obj(tbus obj)
{
#ifdef _WIN32
- if (obj == 0)
- {
+
+ if (obj == 0)
+ {
+ return 0;
+ }
+
+ ResetEvent((HANDLE)obj);
return 0;
- }
- ResetEvent((HANDLE)obj);
- return 0;
#else
- char buf[64];
+ char buf[64];
+
+ if (obj == 0)
+ {
+ return 0;
+ }
+
+ while (g_tcp_can_recv((int)obj, 0))
+ {
+ recvfrom((int)obj, &buf, 64, 0, 0, 0);
+ }
- if (obj == 0)
- {
return 0;
- }
- while (g_tcp_can_recv((int)obj, 0))
- {
- recvfrom((int)obj, &buf, 64, 0, 0, 0);
- }
- return 0;
#endif
}
@@ -1009,21 +1085,26 @@ int APP_CC
g_is_wait_obj_set(tbus obj)
{
#ifdef _WIN32
- if (obj == 0)
- {
+
+ if (obj == 0)
+ {
+ return 0;
+ }
+
+ if (WaitForSingleObject((HANDLE)obj, 0) == WAIT_OBJECT_0)
+ {
+ return 1;
+ }
+
return 0;
- }
- if (WaitForSingleObject((HANDLE)obj, 0) == WAIT_OBJECT_0)
- {
- return 1;
- }
- return 0;
#else
- if (obj == 0)
- {
- return 0;
- }
- return g_tcp_can_recv((int)obj, 0);
+
+ if (obj == 0)
+ {
+ return 0;
+ }
+
+ return g_tcp_can_recv((int)obj, 0);
#endif
}
@@ -1033,29 +1114,34 @@ int APP_CC
g_delete_wait_obj(tbus obj)
{
#ifdef _WIN32
- if (obj == 0)
- {
+
+ if (obj == 0)
+ {
+ return 0;
+ }
+
+ /* Close event handle */
+ CloseHandle((HANDLE)obj);
return 0;
- }
- /* Close event handle */
- CloseHandle((HANDLE)obj);
- return 0;
#else
- socklen_t sa_size;
- struct sockaddr_un sa;
+ socklen_t sa_size;
+ struct sockaddr_un sa;
+
+ if (obj == 0)
+ {
+ return 0;
+ }
+
+ sa_size = sizeof(sa);
+
+ if (getsockname((int)obj, (struct sockaddr *)&sa, &sa_size) < 0)
+ {
+ return 1;
+ }
- if (obj == 0)
- {
+ close((int)obj);
+ unlink(sa.sun_path);
return 0;
- }
- sa_size = sizeof(sa);
- if (getsockname((int)obj, (struct sockaddr*)&sa, &sa_size) < 0)
- {
- return 1;
- }
- close((int)obj);
- unlink(sa.sun_path);
- return 0;
#endif
}
@@ -1067,158 +1153,182 @@ g_close_wait_obj(tbus obj)
{
#ifdef _WIN32
#else
- close((int)obj);
+ close((int)obj);
#endif
- return 0;
+ return 0;
}
/*****************************************************************************/
/* returns error */
int APP_CC
-g_obj_wait(tbus* read_objs, int rcount, tbus* write_objs, int wcount,
+g_obj_wait(tbus *read_objs, int rcount, tbus *write_objs, int wcount,
int mstimeout)
{
#ifdef _WIN32
- HANDLE handles[256];
- DWORD count;
- DWORD error;
- int j;
- int i;
-
- j = 0;
- count = rcount + wcount;
- for (i = 0; i < rcount; i++)
- {
- handles[j++] = (HANDLE)(read_objs[i]);
- }
- for (i = 0; i < wcount; i++)
- {
- handles[j++] = (HANDLE)(write_objs[i]);
- }
- if (mstimeout < 1)
- {
- mstimeout = INFINITE;
- }
- error = WaitForMultipleObjects(count, handles, FALSE, mstimeout);
- if (error == WAIT_FAILED)
- {
- return 1;
- }
- return 0;
-#else
- fd_set rfds;
- fd_set wfds;
- struct timeval time;
- struct timeval* ptime = (struct timeval *)NULL;
- int i = 0;
- int res = 0;
- int max = 0;
- int sck = 0;
-
- g_memset(&rfds,0,sizeof(fd_set));
- g_memset(&wfds,0,sizeof(fd_set));
- g_memset(&time,0,sizeof(struct timeval));
-
- max = 0;
- if (mstimeout < 1)
- {
- ptime = (struct timeval *)NULL;
- }
- else
- {
- time.tv_sec = mstimeout / 1000;
- time.tv_usec = (mstimeout % 1000) * 1000;
- ptime = &time;
- }
- FD_ZERO(&rfds);
- FD_ZERO(&wfds);
- /* Find the highest descriptor number in read_obj */
- if (read_objs!=NULL)
- {
+ HANDLE handles[256];
+ DWORD count;
+ DWORD error;
+ int j;
+ int i;
+
+ j = 0;
+ count = rcount + wcount;
+
for (i = 0; i < rcount; i++)
{
- sck = (int)(read_objs[i]);
- if (sck > 0)
- {
- FD_SET(sck, &rfds);
- if (sck > max)
+ handles[j++] = (HANDLE)(read_objs[i]);
+ }
+
+ for (i = 0; i < wcount; i++)
+ {
+ handles[j++] = (HANDLE)(write_objs[i]);
+ }
+
+ if (mstimeout < 1)
+ {
+ mstimeout = INFINITE;
+ }
+
+ error = WaitForMultipleObjects(count, handles, FALSE, mstimeout);
+
+ if (error == WAIT_FAILED)
+ {
+ return 1;
+ }
+
+ return 0;
+#else
+ fd_set rfds;
+ fd_set wfds;
+ struct timeval time;
+ struct timeval *ptime = (struct timeval *)NULL;
+ int i = 0;
+ int res = 0;
+ int max = 0;
+ int sck = 0;
+
+ g_memset(&rfds, 0, sizeof(fd_set));
+ g_memset(&wfds, 0, sizeof(fd_set));
+ g_memset(&time, 0, sizeof(struct timeval));
+
+ max = 0;
+
+ if (mstimeout < 1)
+ {
+ ptime = (struct timeval *)NULL;
+ }
+ else
+ {
+ time.tv_sec = mstimeout / 1000;
+ time.tv_usec = (mstimeout % 1000) * 1000;
+ ptime = &time;
+ }
+
+ FD_ZERO(&rfds);
+ FD_ZERO(&wfds);
+
+ /* Find the highest descriptor number in read_obj */
+ if (read_objs != NULL)
+ {
+ for (i = 0; i < rcount; i++)
{
- max = sck; /* max holds the highest socket/descriptor number */
+ sck = (int)(read_objs[i]);
+
+ if (sck > 0)
+ {
+ FD_SET(sck, &rfds);
+
+ if (sck > max)
+ {
+ max = sck; /* max holds the highest socket/descriptor number */
+ }
+ }
}
- }
- }
- }
- else if (rcount>0)
- {
- g_writeln("Programming error read_objs is null");
- return 1; /* error */
- }
- if (write_objs!=NULL)
- {
- for (i = 0; i < wcount; i++)
+ }
+ else if (rcount > 0)
+ {
+ g_writeln("Programming error read_objs is null");
+ return 1; /* error */
+ }
+
+ if (write_objs != NULL)
{
- sck = (int)(write_objs[i]);
- if (sck > 0)
- {
- FD_SET(sck, &wfds);
- if (sck > max)
+ for (i = 0; i < wcount; i++)
{
- max = sck; /* max holds the highest socket/descriptor number */
+ sck = (int)(write_objs[i]);
+
+ if (sck > 0)
+ {
+ FD_SET(sck, &wfds);
+
+ if (sck > max)
+ {
+ max = sck; /* max holds the highest socket/descriptor number */
+ }
+ }
}
- }
}
- }
- else if (wcount > 0)
- {
- g_writeln("Programming error write_objs is null");
- return 1; /* error */
- }
- res = select(max + 1, &rfds, &wfds, 0, ptime);
- if (res < 0)
- {
- /* these are not really errors */
- if ((errno == EAGAIN) ||
- (errno == EWOULDBLOCK) ||
- (errno == EINPROGRESS) ||
- (errno == EINTR)) /* signal occurred */
+ else if (wcount > 0)
+ {
+ g_writeln("Programming error write_objs is null");
+ return 1; /* error */
+ }
+
+ res = select(max + 1, &rfds, &wfds, 0, ptime);
+
+ if (res < 0)
{
- return 0;
+ /* these are not really errors */
+ if ((errno == EAGAIN) ||
+ (errno == EWOULDBLOCK) ||
+ (errno == EINPROGRESS) ||
+ (errno == EINTR)) /* signal occurred */
+ {
+ return 0;
+ }
+
+ return 1; /* error */
}
- return 1; /* error */
- }
- return 0;
+
+ return 0;
#endif
}
/*****************************************************************************/
void APP_CC
-g_random(char* data, int len)
+g_random(char *data, int len)
{
#if defined(_WIN32)
- int index;
+ int index;
+
+ srand(g_time1());
- srand(g_time1());
- for (index = 0; index < len; index++)
- {
- data[index] = (char)rand(); /* rand returns a number between 0 and
+ for (index = 0; index < len; index++)
+ {
+ data[index] = (char)rand(); /* rand returns a number between 0 and
RAND_MAX */
- }
+ }
+
#else
- int fd;
+ int fd;
+
+ memset(data, 0x44, len);
+ fd = open("/dev/urandom", O_RDONLY);
- memset(data, 0x44, len);
- fd = open("/dev/urandom", O_RDONLY);
- if (fd == -1)
- {
- fd = open("/dev/random", O_RDONLY);
- }
- if (fd != -1)
- {
- if (read(fd, data, len) != len)
+ if (fd == -1)
{
+ fd = open("/dev/random", O_RDONLY);
}
- close(fd);
- }
+
+ if (fd != -1)
+ {
+ if (read(fd, data, len) != len)
+ {
+ }
+
+ close(fd);
+ }
+
#endif
}
@@ -1226,35 +1336,75 @@ g_random(char* data, int len)
int APP_CC
g_abs(int i)
{
- return abs(i);
+ return abs(i);
+}
+
+/*****************************************************************************/
+int APP_CC
+g_memcmp(const void *s1, const void *s2, int len)
+{
+ return memcmp(s1, s2, len);
}
/*****************************************************************************/
+/* returns -1 on error, else return handle or file descriptor */
int APP_CC
-g_memcmp(const void* s1, const void* s2, int len)
+g_file_open(const char *file_name)
{
- return memcmp(s1, s2, len);
+#if defined(_WIN32)
+ return (int)CreateFileA(file_name, GENERIC_READ | GENERIC_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
+ 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
+#else
+ int rv;
+
+ rv = open(file_name, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
+
+ if (rv == -1)
+ {
+ /* can't open read / write, try to open read only */
+ rv = open(file_name, O_RDONLY);
+ }
+
+ return rv;
+#endif
}
/*****************************************************************************/
/* returns -1 on error, else return handle or file descriptor */
int APP_CC
-g_file_open(const char* file_name)
+g_file_open_ex(const char *file_name, int aread, int awrite,
+ int acreate, int atrunc)
{
#if defined(_WIN32)
- return (int)CreateFileA(file_name, GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
+ return -1;
#else
- int rv;
+ int rv;
+ int flags;
- rv = open(file_name, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
- if (rv == -1)
- {
- /* can't open read / write, try to open read only */
- rv = open(file_name, O_RDONLY);
- }
- return rv;
+ flags = 0;
+ if (aread && awrite)
+ {
+ flags |= O_RDWR;
+ }
+ else if (aread)
+ {
+ flags |= O_RDONLY;
+ }
+ else if (awrite)
+ {
+ flags |= O_WRONLY;
+ }
+ if (acreate)
+ {
+ flags |= O_CREAT;
+ }
+ if (atrunc)
+ {
+ flags |= O_TRUNC;
+ }
+ rv = open(file_name, flags, S_IRUSR | S_IWUSR);
+ return rv;
#endif
}
@@ -1264,48 +1414,52 @@ int APP_CC
g_file_close(int fd)
{
#if defined(_WIN32)
- CloseHandle((HANDLE)fd);
+ CloseHandle((HANDLE)fd);
#else
- close(fd);
+ close(fd);
#endif
- return 0;
+ return 0;
}
/*****************************************************************************/
/* read from file, returns the number of bytes read or -1 on error */
int APP_CC
-g_file_read(int fd, char* ptr, int len)
+g_file_read(int fd, char *ptr, int len)
{
#if defined(_WIN32)
- if (ReadFile((HANDLE)fd, (LPVOID)ptr, (DWORD)len, (LPDWORD)&len, 0))
- {
- return len;
- }
- else
- {
- return -1;
- }
+
+ if (ReadFile((HANDLE)fd, (LPVOID)ptr, (DWORD)len, (LPDWORD)&len, 0))
+ {
+ return len;
+ }
+ else
+ {
+ return -1;
+ }
+
#else
- return read(fd, ptr, len);
+ return read(fd, ptr, len);
#endif
}
/*****************************************************************************/
/* write to file, returns the number of bytes writen or -1 on error */
int APP_CC
-g_file_write(int fd, char* ptr, int len)
+g_file_write(int fd, char *ptr, int len)
{
#if defined(_WIN32)
- if (WriteFile((HANDLE)fd, (LPVOID)ptr, (DWORD)len, (LPDWORD)&len, 0))
- {
- return len;
- }
- else
- {
- return -1;
- }
+
+ if (WriteFile((HANDLE)fd, (LPVOID)ptr, (DWORD)len, (LPDWORD)&len, 0))
+ {
+ return len;
+ }
+ else
+ {
+ return -1;
+ }
+
#else
- return write(fd, ptr, len);
+ return write(fd, ptr, len);
#endif
}
@@ -1315,19 +1469,21 @@ int APP_CC
g_file_seek(int fd, int offset)
{
#if defined(_WIN32)
- int rv;
+ int rv;
+
+ rv = (int)SetFilePointer((HANDLE)fd, offset, 0, FILE_BEGIN);
+
+ if (rv == (int)INVALID_SET_FILE_POINTER)
+ {
+ return -1;
+ }
+ else
+ {
+ return rv;
+ }
- rv = (int)SetFilePointer((HANDLE)fd, offset, 0, FILE_BEGIN);
- if (rv == (int)INVALID_SET_FILE_POINTER)
- {
- return -1;
- }
- else
- {
- return rv;
- }
#else
- return (int)lseek(fd, offset, SEEK_SET);
+ return (int)lseek(fd, offset, SEEK_SET);
#endif
}
@@ -1338,67 +1494,69 @@ int APP_CC
g_file_lock(int fd, int start, int len)
{
#if defined(_WIN32)
- return LockFile((HANDLE)fd, start, 0, len, 0);
+ return LockFile((HANDLE)fd, start, 0, len, 0);
#else
- struct flock lock;
+ struct flock lock;
- lock.l_type = F_WRLCK;
- lock.l_whence = SEEK_SET;
- lock.l_start = start;
- lock.l_len = len;
- if (fcntl(fd, F_SETLK, &lock) == -1)
- {
- return 0;
- }
- return 1;
+ lock.l_type = F_WRLCK;
+ lock.l_whence = SEEK_SET;
+ lock.l_start = start;
+ lock.l_len = len;
+
+ if (fcntl(fd, F_SETLK, &lock) == -1)
+ {
+ return 0;
+ }
+
+ return 1;
#endif
}
/*****************************************************************************/
/* returns error */
int APP_CC
-g_chmod_hex(const char* filename, int flags)
+g_chmod_hex(const char *filename, int flags)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- int fl;
+ int fl;
- fl = 0;
- fl |= (flags & 0x4000) ? S_ISUID : 0;
- fl |= (flags & 0x2000) ? S_ISGID : 0;
- fl |= (flags & 0x1000) ? S_ISVTX : 0;
- fl |= (flags & 0x0400) ? S_IRUSR : 0;
- fl |= (flags & 0x0200) ? S_IWUSR : 0;
- fl |= (flags & 0x0100) ? S_IXUSR : 0;
- fl |= (flags & 0x0040) ? S_IRGRP : 0;
- fl |= (flags & 0x0020) ? S_IWGRP : 0;
- fl |= (flags & 0x0010) ? S_IXGRP : 0;
- fl |= (flags & 0x0004) ? S_IROTH : 0;
- fl |= (flags & 0x0002) ? S_IWOTH : 0;
- fl |= (flags & 0x0001) ? S_IXOTH : 0;
- return chmod(filename, fl);
+ fl = 0;
+ fl |= (flags & 0x4000) ? S_ISUID : 0;
+ fl |= (flags & 0x2000) ? S_ISGID : 0;
+ fl |= (flags & 0x1000) ? S_ISVTX : 0;
+ fl |= (flags & 0x0400) ? S_IRUSR : 0;
+ fl |= (flags & 0x0200) ? S_IWUSR : 0;
+ fl |= (flags & 0x0100) ? S_IXUSR : 0;
+ fl |= (flags & 0x0040) ? S_IRGRP : 0;
+ fl |= (flags & 0x0020) ? S_IWGRP : 0;
+ fl |= (flags & 0x0010) ? S_IXGRP : 0;
+ fl |= (flags & 0x0004) ? S_IROTH : 0;
+ fl |= (flags & 0x0002) ? S_IWOTH : 0;
+ fl |= (flags & 0x0001) ? S_IXOTH : 0;
+ return chmod(filename, fl);
#endif
}
/*****************************************************************************/
/* returns error, zero is ok */
int APP_CC
-g_chown(const char* name, int uid, int gid)
+g_chown(const char *name, int uid, int gid)
{
- return chown(name, uid, gid);
+ return chown(name, uid, gid);
}
/*****************************************************************************/
/* returns error, always zero */
int APP_CC
-g_mkdir(const char* dirname)
+g_mkdir(const char *dirname)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- mkdir(dirname, S_IRWXU);
- return 0;
+ mkdir(dirname, S_IRWXU);
+ return 0;
#endif
}
@@ -1406,82 +1564,87 @@ g_mkdir(const char* dirname)
/* gets the current working directory and puts up to maxlen chars in
dirname
always returns 0 */
-char* APP_CC
-g_get_current_dir(char* dirname, int maxlen)
+char *APP_CC
+g_get_current_dir(char *dirname, int maxlen)
{
#if defined(_WIN32)
- GetCurrentDirectoryA(maxlen, dirname);
- return 0;
+ GetCurrentDirectoryA(maxlen, dirname);
+ return 0;
#else
- if (getcwd(dirname, maxlen) == 0)
- {
- }
- return 0;
+
+ if (getcwd(dirname, maxlen) == 0)
+ {
+ }
+
+ return 0;
#endif
}
/*****************************************************************************/
/* returns error, zero on success and -1 on failure */
int APP_CC
-g_set_current_dir(char* dirname)
+g_set_current_dir(char *dirname)
{
#if defined(_WIN32)
- if (SetCurrentDirectoryA(dirname))
- {
- return 0;
- }
- else
- {
- return -1;
- }
+
+ if (SetCurrentDirectoryA(dirname))
+ {
+ return 0;
+ }
+ else
+ {
+ return -1;
+ }
+
#else
- return chdir(dirname);
+ return chdir(dirname);
#endif
}
/*****************************************************************************/
/* returns boolean, non zero if the file exists */
int APP_CC
-g_file_exist(const char* filename)
+g_file_exist(const char *filename)
{
#if defined(_WIN32)
- return 0; // use FileAge(filename) <> -1
+ return 0; // use FileAge(filename) <> -1
#else
- return access(filename, F_OK) == 0;
+ return access(filename, F_OK) == 0;
#endif
}
/*****************************************************************************/
/* returns boolean, non zero if the directory exists */
int APP_CC
-g_directory_exist(const char* dirname)
+g_directory_exist(const char *dirname)
{
#if defined(_WIN32)
- return 0; // use GetFileAttributes and check return value
- // is not -1 and FILE_ATTRIBUT_DIRECTORY bit is set
+ return 0; // use GetFileAttributes and check return value
+ // is not -1 and FILE_ATTRIBUT_DIRECTORY bit is set
#else
- struct stat st;
+ struct stat st;
+
+ if (stat(dirname, &st) == 0)
+ {
+ return S_ISDIR(st.st_mode);
+ }
+ else
+ {
+ return 0;
+ }
- if (stat(dirname, &st) == 0)
- {
- return S_ISDIR(st.st_mode);
- }
- else
- {
- return 0;
- }
#endif
}
/*****************************************************************************/
/* returns boolean */
int APP_CC
-g_create_dir(const char* dirname)
+g_create_dir(const char *dirname)
{
#if defined(_WIN32)
- return CreateDirectoryA(dirname, 0); // test this
+ return CreateDirectoryA(dirname, 0); // test this
#else
- return mkdir(dirname, (mode_t)-1) == 0;
+ return mkdir(dirname, (mode_t) - 1) == 0;
#endif
}
@@ -1490,353 +1653,380 @@ g_create_dir(const char* dirname)
example /tmp/a/b/c/readme.txt will try to create /tmp/a/b/c
returns boolean */
int APP_CC
-g_create_path(const char* path)
-{
- char* pp;
- char* sp;
- char* copypath;
- int status;
-
- status = 1;
- copypath = g_strdup(path);
- pp = copypath;
- sp = strchr(pp, '/');
- while (sp != 0)
- {
- if (sp != pp)
- {
- *sp = 0;
- if (!g_directory_exist(copypath))
- {
- if (!g_create_dir(copypath))
+g_create_path(const char *path)
+{
+ char *pp;
+ char *sp;
+ char *copypath;
+ int status;
+
+ status = 1;
+ copypath = g_strdup(path);
+ pp = copypath;
+ sp = strchr(pp, '/');
+
+ while (sp != 0)
+ {
+ if (sp != pp)
{
- status = 0;
- break;
+ *sp = 0;
+
+ if (!g_directory_exist(copypath))
+ {
+ if (!g_create_dir(copypath))
+ {
+ status = 0;
+ break;
+ }
+ }
+
+ *sp = '/';
}
- }
- *sp = '/';
+
+ pp = sp + 1;
+ sp = strchr(pp, '/');
}
- pp = sp + 1;
- sp = strchr(pp, '/');
- }
- g_free(copypath);
- return status;
+
+ g_free(copypath);
+ return status;
}
/*****************************************************************************/
/* returns boolean */
int APP_CC
-g_remove_dir(const char* dirname)
+g_remove_dir(const char *dirname)
{
#if defined(_WIN32)
- return RemoveDirectoryA(dirname); // test this
+ return RemoveDirectoryA(dirname); // test this
#else
- return rmdir(dirname) == 0;
+ return rmdir(dirname) == 0;
#endif
}
/*****************************************************************************/
/* returns non zero if the file was deleted */
int APP_CC
-g_file_delete(const char* filename)
+g_file_delete(const char *filename)
{
#if defined(_WIN32)
- return DeleteFileA(filename);
+ return DeleteFileA(filename);
#else
- return unlink(filename) != -1;
+ return unlink(filename) != -1;
#endif
}
/*****************************************************************************/
/* returns file size, -1 on error */
int APP_CC
-g_file_get_size(const char* filename)
+g_file_get_size(const char *filename)
{
#if defined(_WIN32)
- return -1;
+ return -1;
#else
- struct stat st;
+ struct stat st;
+
+ if (stat(filename, &st) == 0)
+ {
+ return (int)(st.st_size);
+ }
+ else
+ {
+ return -1;
+ }
- if (stat(filename, &st) == 0)
- {
- return (int)(st.st_size);
- }
- else
- {
- return -1;
- }
#endif
}
/*****************************************************************************/
/* returns length of text */
int APP_CC
-g_strlen(const char* text)
+g_strlen(const char *text)
{
- if (text == NULL)
- {
- return 0;
- }
- return strlen(text);
+ if (text == NULL)
+ {
+ return 0;
+ }
+
+ return strlen(text);
}
/*****************************************************************************/
/* returns dest */
-char* APP_CC
-g_strcpy(char* dest, const char* src)
-{
- if (src == 0 && dest != 0)
- {
- dest[0] = 0;
- return dest;
- }
- if (dest == 0 || src == 0)
- {
- return 0;
- }
- return strcpy(dest, src);
+char *APP_CC
+g_strcpy(char *dest, const char *src)
+{
+ if (src == 0 && dest != 0)
+ {
+ dest[0] = 0;
+ return dest;
+ }
+
+ if (dest == 0 || src == 0)
+ {
+ return 0;
+ }
+
+ return strcpy(dest, src);
}
/*****************************************************************************/
/* returns dest */
-char* APP_CC
-g_strncpy(char* dest, const char* src, int len)
-{
- char* rv;
-
- if (src == 0 && dest != 0)
- {
- dest[0] = 0;
- return dest;
- }
- if (dest == 0 || src == 0)
- {
- return 0;
- }
- rv = strncpy(dest, src, len);
- dest[len] = 0;
- return rv;
+char *APP_CC
+g_strncpy(char *dest, const char *src, int len)
+{
+ char *rv;
+
+ if (src == 0 && dest != 0)
+ {
+ dest[0] = 0;
+ return dest;
+ }
+
+ if (dest == 0 || src == 0)
+ {
+ return 0;
+ }
+
+ rv = strncpy(dest, src, len);
+ dest[len] = 0;
+ return rv;
}
/*****************************************************************************/
/* returns dest */
-char* APP_CC
-g_strcat(char* dest, const char* src)
+char *APP_CC
+g_strcat(char *dest, const char *src)
{
- if (dest == 0 || src == 0)
- {
- return dest;
- }
- return strcat(dest, src);
+ if (dest == 0 || src == 0)
+ {
+ return dest;
+ }
+
+ return strcat(dest, src);
}
/*****************************************************************************/
/* if in = 0, return 0 else return newly alloced copy of in */
-char* APP_CC
-g_strdup(const char* in)
+char *APP_CC
+g_strdup(const char *in)
{
- int len;
- char* p;
+ int len;
+ char *p;
- if (in == 0)
- {
- return 0;
- }
- len = g_strlen(in);
- p = (char*)g_malloc(len + 1, 0);
- if (p != NULL)
- {
- g_strcpy(p, in);
- }
- return p;
+ if (in == 0)
+ {
+ return 0;
+ }
+
+ len = g_strlen(in);
+ p = (char *)g_malloc(len + 1, 0);
+
+ if (p != NULL)
+ {
+ g_strcpy(p, in);
+ }
+
+ return p;
}
/*****************************************************************************/
/* if in = 0, return 0 else return newly alloced copy of input string
* if the input string is larger than maxlen the returned string will be
* truncated. All strings returned will include null termination*/
-char* APP_CC
-g_strndup(const char* in, const unsigned int maxlen)
+char *APP_CC
+g_strndup(const char *in, const unsigned int maxlen)
{
- int len;
- char* p;
+ int len;
+ char *p;
- if (in == 0)
- {
- return 0;
- }
- len = g_strlen(in);
- if (len>maxlen)
- {
- len = maxlen - 1;
- }
- p = (char*)g_malloc(len + 2, 0);
- if (p != NULL)
- {
- g_strncpy(p, in,len+1);
- }
- return p;
+ if (in == 0)
+ {
+ return 0;
+ }
+
+ len = g_strlen(in);
+
+ if (len > maxlen)
+ {
+ len = maxlen - 1;
+ }
+
+ p = (char *)g_malloc(len + 2, 0);
+
+ if (p != NULL)
+ {
+ g_strncpy(p, in, len + 1);
+ }
+
+ return p;
}
/*****************************************************************************/
int APP_CC
-g_strcmp(const char* c1, const char* c2)
+g_strcmp(const char *c1, const char *c2)
{
- return strcmp(c1, c2);
+ return strcmp(c1, c2);
}
/*****************************************************************************/
int APP_CC
-g_strncmp(const char* c1, const char* c2, int len)
+g_strncmp(const char *c1, const char *c2, int len)
{
- return strncmp(c1, c2, len);
+ return strncmp(c1, c2, len);
}
/*****************************************************************************/
int APP_CC
-g_strcasecmp(const char* c1, const char* c2)
+g_strcasecmp(const char *c1, const char *c2)
{
#if defined(_WIN32)
- return stricmp(c1, c2);
+ return stricmp(c1, c2);
#else
- return strcasecmp(c1, c2);
+ return strcasecmp(c1, c2);
#endif
}
/*****************************************************************************/
int APP_CC
-g_strncasecmp(const char* c1, const char* c2, int len)
+g_strncasecmp(const char *c1, const char *c2, int len)
{
#if defined(_WIN32)
- return strnicmp(c1, c2, len);
+ return strnicmp(c1, c2, len);
#else
- return strncasecmp(c1, c2, len);
+ return strncasecmp(c1, c2, len);
#endif
}
/*****************************************************************************/
int APP_CC
-g_atoi(const char* str)
+g_atoi(const char *str)
{
- if (str == 0)
- {
- return 0;
- }
- return atoi(str);
-}
-
-/*****************************************************************************/
-int APP_CC
-g_htoi(char* str)
-{
- int len;
- int index;
- int rv;
- int val;
- int shift;
-
- rv = 0;
- len = strlen(str);
- index = len - 1;
- shift = 0;
- while (index >= 0)
- {
- val = 0;
- switch (str[index])
- {
- case '1':
- val = 1;
- break;
- case '2':
- val = 2;
- break;
- case '3':
- val = 3;
- break;
- case '4':
- val = 4;
- break;
- case '5':
- val = 5;
- break;
- case '6':
- val = 6;
- break;
- case '7':
- val = 7;
- break;
- case '8':
- val = 8;
- break;
- case '9':
- val = 9;
- break;
- case 'a':
- case 'A':
- val = 10;
- break;
- case 'b':
- case 'B':
- val = 11;
- break;
- case 'c':
- case 'C':
- val = 12;
- break;
- case 'd':
- case 'D':
- val = 13;
- break;
- case 'e':
- case 'E':
- val = 14;
- break;
- case 'f':
- case 'F':
- val = 15;
- break;
- }
- rv = rv | (val << shift);
- index--;
- shift += 4;
- }
- return rv;
-}
-
-/*****************************************************************************/
-int APP_CC
-g_pos(char* str, const char* to_find)
-{
- char* pp;
-
- pp = strstr(str, to_find);
- if (pp == 0)
- {
- return -1;
- }
- return (pp - str);
+ if (str == 0)
+ {
+ return 0;
+ }
+
+ return atoi(str);
+}
+
+/*****************************************************************************/
+int APP_CC
+g_htoi(char *str)
+{
+ int len;
+ int index;
+ int rv;
+ int val;
+ int shift;
+
+ rv = 0;
+ len = strlen(str);
+ index = len - 1;
+ shift = 0;
+
+ while (index >= 0)
+ {
+ val = 0;
+
+ switch (str[index])
+ {
+ case '1':
+ val = 1;
+ break;
+ case '2':
+ val = 2;
+ break;
+ case '3':
+ val = 3;
+ break;
+ case '4':
+ val = 4;
+ break;
+ case '5':
+ val = 5;
+ break;
+ case '6':
+ val = 6;
+ break;
+ case '7':
+ val = 7;
+ break;
+ case '8':
+ val = 8;
+ break;
+ case '9':
+ val = 9;
+ break;
+ case 'a':
+ case 'A':
+ val = 10;
+ break;
+ case 'b':
+ case 'B':
+ val = 11;
+ break;
+ case 'c':
+ case 'C':
+ val = 12;
+ break;
+ case 'd':
+ case 'D':
+ val = 13;
+ break;
+ case 'e':
+ case 'E':
+ val = 14;
+ break;
+ case 'f':
+ case 'F':
+ val = 15;
+ break;
+ }
+
+ rv = rv | (val << shift);
+ index--;
+ shift += 4;
+ }
+
+ return rv;
+}
+
+/*****************************************************************************/
+int APP_CC
+g_pos(char *str, const char *to_find)
+{
+ char *pp;
+
+ pp = strstr(str, to_find);
+
+ if (pp == 0)
+ {
+ return -1;
+ }
+
+ return (pp - str);
}
/*****************************************************************************/
int APP_CC
-g_mbstowcs(twchar* dest, const char* src, int n)
+g_mbstowcs(twchar *dest, const char *src, int n)
{
- wchar_t* ldest;
- int rv;
+ wchar_t *ldest;
+ int rv;
- ldest = (wchar_t*)dest;
- rv = mbstowcs(ldest, src, n);
- return rv;
+ ldest = (wchar_t *)dest;
+ rv = mbstowcs(ldest, src, n);
+ return rv;
}
/*****************************************************************************/
int APP_CC
-g_wcstombs(char* dest, const twchar* src, int n)
+g_wcstombs(char *dest, const twchar *src, int n)
{
- const wchar_t* lsrc;
- int rv;
+ const wchar_t *lsrc;
+ int rv;
- lsrc = (const wchar_t*)src;
- rv = wcstombs(dest, lsrc, n);
- return rv;
+ lsrc = (const wchar_t *)src;
+ rv = wcstombs(dest, lsrc, n);
+ return rv;
}
/*****************************************************************************/
@@ -1845,127 +2035,143 @@ g_wcstombs(char* dest, const twchar* src, int n)
/* trim_flags 1 trim left, 2 trim right, 3 trim both, 4 trim through */
/* this will always shorten the string or not change it */
int APP_CC
-g_strtrim(char* str, int trim_flags)
+g_strtrim(char *str, int trim_flags)
{
- int index;
- int len;
- int text1_index;
- int got_char;
- wchar_t* text;
- wchar_t* text1;
+ int index;
+ int len;
+ int text1_index;
+ int got_char;
+ wchar_t *text;
+ wchar_t *text1;
+
+ len = mbstowcs(0, str, 0);
+
+ if (len < 1)
+ {
+ return 0;
+ }
+
+ if ((trim_flags < 1) || (trim_flags > 4))
+ {
+ return 1;
+ }
+
+ text = (wchar_t *)malloc(len * sizeof(wchar_t) + 8);
+ text1 = (wchar_t *)malloc(len * sizeof(wchar_t) + 8);
+ text1_index = 0;
+ mbstowcs(text, str, len + 1);
+
+ switch (trim_flags)
+ {
+ case 4: /* trim through */
+
+ for (index = 0; index < len; index++)
+ {
+ if (text[index] > 32)
+ {
+ text1[text1_index] = text[index];
+ text1_index++;
+ }
+ }
+
+ text1[text1_index] = 0;
+ break;
+ case 3: /* trim both */
+ got_char = 0;
+
+ for (index = 0; index < len; index++)
+ {
+ if (got_char)
+ {
+ text1[text1_index] = text[index];
+ text1_index++;
+ }
+ else
+ {
+ if (text[index] > 32)
+ {
+ text1[text1_index] = text[index];
+ text1_index++;
+ got_char = 1;
+ }
+ }
+ }
+
+ text1[text1_index] = 0;
+ len = text1_index;
+
+ /* trim right */
+ for (index = len - 1; index >= 0; index--)
+ {
+ if (text1[index] > 32)
+ {
+ break;
+ }
+ }
+
+ text1_index = index + 1;
+ text1[text1_index] = 0;
+ break;
+ case 2: /* trim right */
+
+ /* copy it */
+ for (index = 0; index < len; index++)
+ {
+ text1[text1_index] = text[index];
+ text1_index++;
+ }
+
+ /* trim right */
+ for (index = len - 1; index >= 0; index--)
+ {
+ if (text1[index] > 32)
+ {
+ break;
+ }
+ }
+
+ text1_index = index + 1;
+ text1[text1_index] = 0;
+ break;
+ case 1: /* trim left */
+ got_char = 0;
+
+ for (index = 0; index < len; index++)
+ {
+ if (got_char)
+ {
+ text1[text1_index] = text[index];
+ text1_index++;
+ }
+ else
+ {
+ if (text[index] > 32)
+ {
+ text1[text1_index] = text[index];
+ text1_index++;
+ got_char = 1;
+ }
+ }
+ }
+
+ text1[text1_index] = 0;
+ break;
+ }
- len = mbstowcs(0, str, 0);
- if (len < 1)
- {
+ wcstombs(str, text1, text1_index + 1);
+ free(text);
+ free(text1);
return 0;
- }
- if ((trim_flags < 1) || (trim_flags > 4))
- {
- return 1;
- }
- text = (wchar_t*)malloc(len * sizeof(wchar_t) + 8);
- text1 = (wchar_t*)malloc(len * sizeof(wchar_t) + 8);
- text1_index = 0;
- mbstowcs(text, str, len + 1);
- switch (trim_flags)
- {
- case 4: /* trim through */
- for (index = 0; index < len; index++)
- {
- if (text[index] > 32)
- {
- text1[text1_index] = text[index];
- text1_index++;
- }
- }
- text1[text1_index] = 0;
- break;
- case 3: /* trim both */
- got_char = 0;
- for (index = 0; index < len; index++)
- {
- if (got_char)
- {
- text1[text1_index] = text[index];
- text1_index++;
- }
- else
- {
- if (text[index] > 32)
- {
- text1[text1_index] = text[index];
- text1_index++;
- got_char = 1;
- }
- }
- }
- text1[text1_index] = 0;
- len = text1_index;
- /* trim right */
- for (index = len - 1; index >= 0; index--)
- {
- if (text1[index] > 32)
- {
- break;
- }
- }
- text1_index = index + 1;
- text1[text1_index] = 0;
- break;
- case 2: /* trim right */
- /* copy it */
- for (index = 0; index < len; index++)
- {
- text1[text1_index] = text[index];
- text1_index++;
- }
- /* trim right */
- for (index = len - 1; index >= 0; index--)
- {
- if (text1[index] > 32)
- {
- break;
- }
- }
- text1_index = index + 1;
- text1[text1_index] = 0;
- break;
- case 1: /* trim left */
- got_char = 0;
- for (index = 0; index < len; index++)
- {
- if (got_char)
- {
- text1[text1_index] = text[index];
- text1_index++;
- }
- else
- {
- if (text[index] > 32)
- {
- text1[text1_index] = text[index];
- text1_index++;
- got_char = 1;
- }
- }
- }
- text1[text1_index] = 0;
- break;
- }
- wcstombs(str, text1, text1_index + 1);
- free(text);
- free(text1);
- return 0;
}
/*****************************************************************************/
long APP_CC
-g_load_library(char* in)
+g_load_library(char *in)
{
#if defined(_WIN32)
- return (long)LoadLibraryA(in);
+ return (long)LoadLibraryA(in);
#else
- return (long)dlopen(in, RTLD_LOCAL | RTLD_LAZY);
+ return (long)dlopen(in, RTLD_LOCAL | RTLD_LAZY);
#endif
}
@@ -1973,54 +2179,56 @@ g_load_library(char* in)
int APP_CC
g_free_library(long lib)
{
- if (lib == 0)
- {
- return 0;
- }
+ if (lib == 0)
+ {
+ return 0;
+ }
+
#if defined(_WIN32)
- return FreeLibrary((HMODULE)lib);
+ return FreeLibrary((HMODULE)lib);
#else
- return dlclose((void*)lib);
+ return dlclose((void *)lib);
#endif
}
/*****************************************************************************/
/* returns NULL if not found */
-void* APP_CC
-g_get_proc_address(long lib, const char* name)
+void *APP_CC
+g_get_proc_address(long lib, const char *name)
{
- if (lib == 0)
- {
- return 0;
- }
+ if (lib == 0)
+ {
+ return 0;
+ }
+
#if defined(_WIN32)
- return GetProcAddress((HMODULE)lib, name);
+ return GetProcAddress((HMODULE)lib, name);
#else
- return dlsym((void*)lib, name);
+ return dlsym((void *)lib, name);
#endif
}
/*****************************************************************************/
/* does not work in win32 */
int APP_CC
-g_system(char* aexec)
+g_system(char *aexec)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- return system(aexec);
+ return system(aexec);
#endif
}
/*****************************************************************************/
/* does not work in win32 */
-char* APP_CC
+char *APP_CC
g_get_strerror(void)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- return strerror(errno);
+ return strerror(errno);
#endif
}
@@ -2029,43 +2237,43 @@ int APP_CC
g_get_errno(void)
{
#if defined(_WIN32)
- return GetLastError();
+ return GetLastError();
#else
- return errno;
+ return errno;
#endif
}
/*****************************************************************************/
/* does not work in win32 */
int APP_CC
-g_execvp(const char* p1, char* args[])
+g_execvp(const char *p1, char *args[])
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- int rv;
+ int rv;
- g_rm_temp_dir();
- rv = execvp(p1, args);
- g_mk_temp_dir(0);
- return rv;
+ g_rm_temp_dir();
+ rv = execvp(p1, args);
+ g_mk_temp_dir(0);
+ return rv;
#endif
}
/*****************************************************************************/
/* does not work in win32 */
int APP_CC
-g_execlp3(const char* a1, const char* a2, const char* a3)
+g_execlp3(const char *a1, const char *a2, const char *a3)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- int rv;
+ int rv;
- g_rm_temp_dir();
- rv = execlp(a1, a2, a3, (void*)0);
- g_mk_temp_dir(0);
- return rv;
+ g_rm_temp_dir();
+ rv = execlp(a1, a2, a3, (void *)0);
+ g_mk_temp_dir(0);
+ return rv;
#endif
}
@@ -2076,7 +2284,7 @@ g_signal_child_stop(void (*func)(int))
{
#if defined(_WIN32)
#else
- signal(SIGCHLD, func);
+ signal(SIGCHLD, func);
#endif
}
@@ -2087,7 +2295,7 @@ g_signal_hang_up(void (*func)(int))
{
#if defined(_WIN32)
#else
- signal(SIGHUP, func);
+ signal(SIGHUP, func);
#endif
}
@@ -2098,7 +2306,7 @@ g_signal_user_interrupt(void (*func)(int))
{
#if defined(_WIN32)
#else
- signal(SIGINT, func);
+ signal(SIGINT, func);
#endif
}
@@ -2109,7 +2317,7 @@ g_signal_kill(void (*func)(int))
{
#if defined(_WIN32)
#else
- signal(SIGKILL, func);
+ signal(SIGKILL, func);
#endif
}
@@ -2120,7 +2328,7 @@ g_signal_terminate(void (*func)(int))
{
#if defined(_WIN32)
#else
- signal(SIGTERM, func);
+ signal(SIGTERM, func);
#endif
}
@@ -2131,7 +2339,7 @@ g_signal_pipe(void (*func)(int))
{
#if defined(_WIN32)
#else
- signal(SIGPIPE, func);
+ signal(SIGPIPE, func);
#endif
}
@@ -2142,7 +2350,7 @@ g_signal_usr1(void (*func)(int))
{
#if defined(_WIN32)
#else
- signal(SIGUSR1, func);
+ signal(SIGUSR1, func);
#endif
}
@@ -2152,16 +2360,18 @@ int APP_CC
g_fork(void)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- int rv;
+ int rv;
- rv = fork();
- if (rv == 0) /* child */
- {
- g_mk_temp_dir(0);
- }
- return rv;
+ rv = fork();
+
+ if (rv == 0) /* child */
+ {
+ g_mk_temp_dir(0);
+ }
+
+ return rv;
#endif
}
@@ -2171,9 +2381,9 @@ int APP_CC
g_setgid(int pid)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- return setgid(pid);
+ return setgid(pid);
#endif
}
@@ -2181,12 +2391,12 @@ g_setgid(int pid)
/* returns error, zero is success, non zero is error */
/* does not work in win32 */
int APP_CC
-g_initgroups(const char* user, int gid)
+g_initgroups(const char *user, int gid)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- return initgroups(user, gid);
+ return initgroups(user, gid);
#endif
}
@@ -2197,9 +2407,22 @@ int APP_CC
g_getuid(void)
{
#if defined(_WIN32)
- return 0;
+ return 0;
+#else
+ return getuid();
+#endif
+}
+
+/*****************************************************************************/
+/* does not work in win32 */
+/* returns user id */
+int APP_CC
+g_getgid(void)
+{
+#if defined(_WIN32)
+ return 0;
#else
- return getuid();
+ return getgid();
#endif
}
@@ -2210,9 +2433,9 @@ int APP_CC
g_setuid(int pid)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- return setuid(pid);
+ return setuid(pid);
#endif
}
@@ -2223,20 +2446,22 @@ int APP_CC
g_waitchild(void)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- int wstat;
- int rv;
+ int wstat;
+ int rv;
+
+ rv = waitpid(0, &wstat, WNOHANG);
- rv = waitpid(0, &wstat, WNOHANG);
- if (rv == -1)
- {
- if (errno == EINTR) /* signal occurred */
+ if (rv == -1)
{
- rv = 0;
+ if (errno == EINTR) /* signal occurred */
+ {
+ rv = 0;
+ }
}
- }
- return rv;
+
+ return rv;
#endif
}
@@ -2247,23 +2472,28 @@ int APP_CC
g_waitpid(int pid)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- int rv = 0;
- if (pid < 0) {
- rv = -1;
- }
- else {
- rv = waitpid(pid, 0, 0);
- if (rv == -1)
+ int rv = 0;
+
+ if (pid < 0)
{
- if (errno == EINTR) /* signal occurred */
- {
- rv = 0;
- }
+ rv = -1;
+ }
+ else
+ {
+ rv = waitpid(pid, 0, 0);
+
+ if (rv == -1)
+ {
+ if (errno == EINTR) /* signal occurred */
+ {
+ rv = 0;
+ }
+ }
}
- }
- return rv;
+
+ return rv;
#endif
}
@@ -2274,31 +2504,31 @@ g_clearenv(void)
{
#if defined(_WIN32)
#else
- environ = 0;
+ environ = 0;
#endif
}
/*****************************************************************************/
/* does not work in win32 */
int APP_CC
-g_setenv(const char* name, const char* value, int rewrite)
+g_setenv(const char *name, const char *value, int rewrite)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- return setenv(name, value, rewrite);
+ return setenv(name, value, rewrite);
#endif
}
/*****************************************************************************/
/* does not work in win32 */
-char* APP_CC
-g_getenv(const char* name)
+char *APP_CC
+g_getenv(const char *name)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- return getenv(name);
+ return getenv(name);
#endif
}
@@ -2306,8 +2536,8 @@ g_getenv(const char* name)
int APP_CC
g_exit(int exit_code)
{
- _exit(exit_code);
- return 0;
+ _exit(exit_code);
+ return 0;
}
/*****************************************************************************/
@@ -2315,9 +2545,9 @@ int APP_CC
g_getpid(void)
{
#if defined(_WIN32)
- return (int)GetCurrentProcessId();
+ return (int)GetCurrentProcessId();
#else
- return (int)getpid();
+ return (int)getpid();
#endif
}
@@ -2327,9 +2557,9 @@ int APP_CC
g_sigterm(int pid)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- return kill(pid, SIGTERM);
+ return kill(pid, SIGTERM);
#endif
}
@@ -2337,40 +2567,47 @@ g_sigterm(int pid)
/* returns 0 if ok */
/* does not work in win32 */
int APP_CC
-g_getuser_info(const char* username, int* gid, int* uid, char* shell,
- char* dir, char* gecos)
+g_getuser_info(const char *username, int *gid, int *uid, char *shell,
+ char *dir, char *gecos)
{
#if defined(_WIN32)
- return 1;
+ return 1;
#else
- struct passwd* pwd_1;
+ struct passwd *pwd_1;
- pwd_1 = getpwnam(username);
- if (pwd_1 != 0)
- {
- if (gid != 0)
- {
- *gid = pwd_1->pw_gid;
- }
- if (uid != 0)
- {
- *uid = pwd_1->pw_uid;
- }
- if (dir != 0)
- {
- g_strcpy(dir, pwd_1->pw_dir);
- }
- if (shell != 0)
- {
- g_strcpy(shell, pwd_1->pw_shell);
- }
- if (gecos != 0)
+ pwd_1 = getpwnam(username);
+
+ if (pwd_1 != 0)
{
- g_strcpy(gecos, pwd_1->pw_gecos);
+ if (gid != 0)
+ {
+ *gid = pwd_1->pw_gid;
+ }
+
+ if (uid != 0)
+ {
+ *uid = pwd_1->pw_uid;
+ }
+
+ if (dir != 0)
+ {
+ g_strcpy(dir, pwd_1->pw_dir);
+ }
+
+ if (shell != 0)
+ {
+ g_strcpy(shell, pwd_1->pw_shell);
+ }
+
+ if (gecos != 0)
+ {
+ g_strcpy(gecos, pwd_1->pw_gecos);
+ }
+
+ return 0;
}
- return 0;
- }
- return 1;
+
+ return 1;
#endif
}
@@ -2378,23 +2615,26 @@ g_getuser_info(const char* username, int* gid, int* uid, char* shell,
/* returns 0 if ok */
/* does not work in win32 */
int APP_CC
-g_getgroup_info(const char* groupname, int* gid)
+g_getgroup_info(const char *groupname, int *gid)
{
#if defined(_WIN32)
- return 1;
+ return 1;
#else
- struct group* g;
+ struct group *g;
- g = getgrnam(groupname);
- if (g != 0)
- {
- if (gid != 0)
+ g = getgrnam(groupname);
+
+ if (g != 0)
{
- *gid = g->gr_gid;
+ if (gid != 0)
+ {
+ *gid = g->gr_gid;
+ }
+
+ return 0;
}
- return 0;
- }
- return 1;
+
+ return 1;
#endif
}
@@ -2403,31 +2643,36 @@ g_getgroup_info(const char* groupname, int* gid)
/* if zero is returned, then ok is set */
/* does not work in win32 */
int APP_CC
-g_check_user_in_group(const char* username, int gid, int* ok)
+g_check_user_in_group(const char *username, int gid, int *ok)
{
#if defined(_WIN32)
- return 1;
+ return 1;
#else
- struct group* groups;
- int i;
+ struct group *groups;
+ int i;
- groups = getgrgid(gid);
- if (groups == 0)
- {
- return 1;
- }
- *ok = 0;
- i = 0;
- while (0 != groups->gr_mem[i])
- {
- if (0 == g_strcmp(groups->gr_mem[i], username))
+ groups = getgrgid(gid);
+
+ if (groups == 0)
{
- *ok = 1;
- break;
+ return 1;
}
- i++;
- }
- return 0;
+
+ *ok = 0;
+ i = 0;
+
+ while (0 != groups->gr_mem[i])
+ {
+ if (0 == g_strcmp(groups->gr_mem[i], username))
+ {
+ *ok = 1;
+ break;
+ }
+
+ i++;
+ }
+
+ return 0;
#endif
}
@@ -2440,9 +2685,9 @@ int APP_CC
g_time1(void)
{
#if defined(_WIN32)
- return GetTickCount() / 1000;
+ return GetTickCount() / 1000;
#else
- return time(0);
+ return time(0);
#endif
}
@@ -2453,13 +2698,13 @@ int APP_CC
g_time2(void)
{
#if defined(_WIN32)
- return (int)GetTickCount();
+ return (int)GetTickCount();
#else
- struct tms tm;
- clock_t num_ticks = 0;
- g_memset(&tm,0,sizeof(struct tms));
- num_ticks = times(&tm);
- return (int)(num_ticks * 10);
+ struct tms tm;
+ clock_t num_ticks = 0;
+ g_memset(&tm, 0, sizeof(struct tms));
+ num_ticks = times(&tm);
+ return (int)(num_ticks * 10);
#endif
}
@@ -2470,11 +2715,11 @@ int APP_CC
g_time3(void)
{
#if defined(_WIN32)
- return 0;
+ return 0;
#else
- struct timeval tp;
+ struct timeval tp;
- gettimeofday(&tp, 0);
- return (tp.tv_sec * 1000) + (tp.tv_usec / 1000);
+ gettimeofday(&tp, 0);
+ return (tp.tv_sec * 1000) + (tp.tv_usec / 1000);
#endif
}