add wdk changes to named branch

This commit is contained in:
berkeviktor@aol.com
2011-02-28 18:59:32 +01:00
parent ad7ea4b77e
commit d03d6e606b
152 changed files with 32939 additions and 529 deletions

View File

@@ -17,7 +17,6 @@
*/
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
@@ -30,10 +29,9 @@
#include "fe.h"
#include "text.h"
#include "xchatc.h"
#include "wdkutil.h"
#ifdef WIN32
#define XCHAT_DIR "X-Chat 2"
#else
#ifndef WIN32
#define XCHAT_DIR ".xchat2"
#endif
#define DEF_FONT "Monospace 9"
@@ -308,12 +306,19 @@ get_xdir_fs (void)
{
if (!xdir_fs)
{
char out[256];
if (portable_mode ())
{
xdir_fs = ".\\config";
}
else
{
char out[256];
if (!get_reg_str ("Software\\Microsoft\\Windows\\CurrentVersion\\"
"Explorer\\Shell Folders", "AppData", out, sizeof (out)))
return "./config";
xdir_fs = g_strdup_printf ("%s\\" XCHAT_DIR, out);
if (!get_reg_str ("Software\\Microsoft\\Windows\\CurrentVersion\\"
"Explorer\\Shell Folders", "AppData", out, sizeof (out)))
return "./config";
xdir_fs = g_strdup_printf ("%s\\" "X-Chat 2", out);
}
}
return xdir_fs;
}
@@ -393,7 +398,7 @@ const struct prefs vars[] = {
{"dcc_blocksize", P_OFFINT (dcc_blocksize), TYPE_INT},
{"dcc_completed_dir", P_OFFSET (dcc_completed_dir), TYPE_STR},
{"dcc_dir", P_OFFSET (dccdir), TYPE_STR},
{"dcc_fast_send", P_OFFINT (fastdccsend), TYPE_BOOL},
/* {"dcc_fast_send", P_OFFINT (fastdccsend), TYPE_BOOL}, */
{"dcc_global_max_get_cps", P_OFFINT (dcc_global_max_get_cps), TYPE_INT},
{"dcc_global_max_send_cps", P_OFFINT (dcc_global_max_send_cps), TYPE_INT},
{"dcc_ip", P_OFFSET (dcc_ip_str), TYPE_STR},
@@ -536,6 +541,7 @@ const struct prefs vars[] = {
{"tab_chans", P_OFFINT (tabchannels), TYPE_BOOL},
{"tab_dialogs", P_OFFINT (privmsgtab), TYPE_BOOL},
{"tab_icons", P_OFFINT (tab_icons), TYPE_BOOL},
{"tab_layout", P_OFFINT (tab_layout), TYPE_INT},
{"tab_new_to_front", P_OFFINT (newtabstofront), TYPE_INT},
{"tab_notices", P_OFFINT (notices_tabs), TYPE_BOOL},
@@ -546,9 +552,14 @@ const struct prefs vars[] = {
{"tab_sort", P_OFFINT (tab_sort), TYPE_BOOL},
{"tab_trunc", P_OFFINT (truncchans), TYPE_INT},
{"tab_utils", P_OFFINT (windows_as_tabs), TYPE_BOOL},
{"tab_xp", P_OFFINT (tab_xp), TYPE_BOOL},
{"text_auto_copy_text", P_OFFINT (autocopy_text), TYPE_BOOL},
{"text_auto_copy_stamp", P_OFFINT (autocopy_stamp), TYPE_BOOL},
{"text_auto_copy_color", P_OFFINT (autocopy_color), TYPE_BOOL},
{"text_background", P_OFFSET (background), TYPE_STR},
{"text_color_nicks", P_OFFINT (colorednicks), TYPE_BOOL},
{"text_emoticons", P_OFFINT (emoticons), TYPE_BOOL},
{"text_font", P_OFFSET (font_normal), TYPE_STR},
{"text_indent", P_OFFINT (indent_nicks), TYPE_BOOL},
{"text_max_indent", P_OFFINT (max_auto_indent), TYPE_INT},
@@ -561,7 +572,7 @@ const struct prefs vars[] = {
{"text_tint_blue", P_OFFINT (tint_blue), TYPE_INT},
{"text_tint_green", P_OFFINT (tint_green), TYPE_INT},
{"text_tint_red", P_OFFINT (tint_red), TYPE_INT},
{"text_transparent", P_OFFINT (transparent), TYPE_BOOL},
/* {"text_transparent", P_OFFINT (transparent), TYPE_BOOL}, */
{"text_wordwrap", P_OFFINT (wordwrap), TYPE_BOOL},
{0, 0, 0},
@@ -624,13 +635,14 @@ load_config (void)
prefs.indent_nicks = 1;
prefs.thin_separator = 1;
prefs._tabs_position = 2; /* 2 = left */
prefs.fastdccsend = 1;
/* prefs.fastdccsend = 1; */
prefs.wordwrap = 1;
prefs.autosave = 1;
prefs.autodialog = 1;
prefs.gui_input_spell = 1;
prefs.autoreconnect = 1;
prefs.recon_delay = 10;
prefs.autocopy_text = 1;
prefs.text_replay = 1;
prefs.tabchannels = 1;
prefs.tab_layout = 2; /* 0=Tabs 1=Reserved 2=Tree */
@@ -648,6 +660,7 @@ load_config (void)
prefs.dialog_height = 256;
prefs.gui_join_dialog = 1;
prefs.gui_quit_dialog = 1;
prefs.slist_skip = 1;
prefs.dcctimeout = 180;
prefs.dccstalltimeout = 60;
prefs.notify_timeout = 15;

View File

@@ -3,7 +3,6 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

View File

@@ -18,7 +18,6 @@
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include "xchat.h"
@@ -134,7 +133,7 @@ ctcp_handle (session *sess, char *to, char *nick, char *ip,
if (!strcasecmp (msg, "VERSION") && !prefs.hidever)
{
snprintf (outbuf, sizeof (outbuf), "VERSION xchat "PACKAGE_VERSION" %s",
snprintf (outbuf, sizeof (outbuf), "VERSION XChat-WDK "PACKAGE_VERSION" / %s",
get_cpu_str ());
serv->p_nctcp (serv, nick, outbuf);
}

View File

@@ -31,7 +31,6 @@
#include <time.h>
#include <errno.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#define WANTSOCKET
@@ -57,6 +56,7 @@
#ifdef USE_DCC64
#define BIG_STR_TO_INT(x) strtoull(x,NULL,10)
#define stat _stat64
#else
#define BIG_STR_TO_INT(x) strtoul(x,NULL,10)
#endif
@@ -1983,9 +1983,7 @@ is_same_file (struct DCC *dcc, struct DCC *new_dcc)
return TRUE;
/* now handle case-insensitive Filesystems: HFS+, FAT */
#ifdef WIN32
#warning no win32 implementation - behaviour may be unreliable
#else
#ifndef WIN32
/* this fstat() shouldn't really fail */
if ((dcc->fp == -1 ? stat (dcc->destfile_fs, &st_a) : fstat (dcc->fp, &st_a)) == -1)
return FALSE;

199
src/common/dirent.c Normal file
View File

@@ -0,0 +1,199 @@
/*****************************************************************************
* dirent.h - dirent API for Microsoft Visual Studio
*
* Copyright (C) 2006 Toni Ronkko
*
* 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 TONI RONKKO 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.
*
* Dec 15, 2009, John Cunningham
* Added rewinddir member function
*
* Jan 18, 2008, Toni Ronkko
* Using FindFirstFileA and WIN32_FIND_DATAA to avoid converting string
* between multi-byte and unicode representations. This makes the
* code simpler and also allows the code to be compiled under MingW. Thanks
* to Azriel Fasten for the suggestion.
*
* Mar 4, 2007, Toni Ronkko
* Bug fix: due to the strncpy_s() function this file only compiled in
* Visual Studio 2005. Using the new string functions only when the
* compiler version allows.
*
* Nov 2, 2006, Toni Ronkko
* Major update: removed support for Watcom C, MS-DOS and Turbo C to
* simplify the file, updated the code to compile cleanly on Visual
* Studio 2005 with both unicode and multi-byte character strings,
* removed rewinddir() as it had a bug.
*
* Aug 20, 2006, Toni Ronkko
* Removed all remarks about MSVC 1.0, which is antiqued now. Simplified
* comments by removing SGML tags.
*
* May 14 2002, Toni Ronkko
* Embedded the function definitions directly to the header so that no
* source modules need to be included in the Visual Studio project. Removed
* all the dependencies to other projects so that this very header can be
* used independently.
*
* May 28 1998, Toni Ronkko
* First version.
*****************************************************************************/
#include "dirent.h"
/* Use the new safe string functions introduced in Visual Studio 2005 */
#if defined(_MSC_VER) && _MSC_VER >= 1400
# define STRNCPY(dest,src,size) strncpy_s((dest),(size),(src),_TRUNCATE)
#else
# define STRNCPY(dest,src,size) strncpy((dest),(src),(size))
#endif
/*****************************************************************************
* Open directory stream DIRNAME for read and return a pointer to the
* internal working area that is used to retrieve individual directory
* entries.
*/
DIR *opendir(const char *dirname)
{
DIR *dirp;
assert (dirname != NULL);
assert (strlen (dirname) < MAX_PATH);
/* construct new DIR structure */
dirp = (DIR*) malloc (sizeof (struct DIR));
if (dirp != NULL) {
char *p;
/* take directory name... */
STRNCPY (dirp->patt, dirname, sizeof(dirp->patt));
dirp->patt[MAX_PATH] = '\0';
/* ... and append search pattern to it */
p = strchr (dirp->patt, '\0');
if (dirp->patt < p && *(p-1) != '\\' && *(p-1) != ':') {
*p++ = '\\';
}
*p++ = '*';
*p = '\0';
/* open stream and retrieve first file */
dirp->search_handle = FindFirstFileA (dirp->patt, &dirp->current.data);
if (dirp->search_handle == INVALID_HANDLE_VALUE) {
/* invalid search pattern? */
free (dirp);
return NULL;
}
/* there is an un-processed directory entry in memory now */
dirp->cached = 1;
}
return dirp;
}
/*****************************************************************************
* Read a directory entry, and return a pointer to a dirent structure
* containing the name of the entry in d_name field. Individual directory
* entries returned by this very function include regular files,
* sub-directories, pseudo-directories "." and "..", but also volume labels,
* hidden files and system files may be returned.
*/
struct dirent *readdir(DIR *dirp)
{
assert (dirp != NULL);
if (dirp->search_handle == INVALID_HANDLE_VALUE) {
/* directory stream was opened/rewound incorrectly or ended normally */
return NULL;
}
/* get next directory entry */
if (dirp->cached != 0) {
/* a valid directory entry already in memory */
dirp->cached = 0;
} else {
/* read next directory entry from disk */
if (FindNextFileA (dirp->search_handle, &dirp->current.data) == FALSE) {
/* the very last file has been processed or an error occured */
FindClose (dirp->search_handle);
dirp->search_handle = INVALID_HANDLE_VALUE;
return NULL;
}
}
/* copy as a multibyte character string */
STRNCPY ( dirp->current.d_name,
dirp->current.data.cFileName,
sizeof(dirp->current.d_name) );
dirp->current.d_name[MAX_PATH] = '\0';
return &dirp->current;
}
/*****************************************************************************
* Close directory stream opened by opendir() function. Close of the
* directory stream invalidates the DIR structure as well as any previously
* read directory entry.
*/
int closedir(DIR *dirp)
{
assert (dirp != NULL);
/* release search handle */
if (dirp->search_handle != INVALID_HANDLE_VALUE) {
FindClose (dirp->search_handle);
dirp->search_handle = INVALID_HANDLE_VALUE;
}
/* release directory handle */
free (dirp);
return 0;
}
/*****************************************************************************
* Resets the position of the directory stream to which dirp refers to the
* beginning of the directory. It also causes the directory stream to refer
* to the current state of the corresponding directory, as a call to opendir()
* would have done. If dirp does not refer to a directory stream, the effect
* is undefined.
*/
void rewinddir(DIR* dirp)
{
/* release search handle */
if (dirp->search_handle != INVALID_HANDLE_VALUE) {
FindClose (dirp->search_handle);
dirp->search_handle = INVALID_HANDLE_VALUE;
}
/* open new search handle and retrieve first file */
dirp->search_handle = FindFirstFileA (dirp->patt, &dirp->current.data);
if (dirp->search_handle == INVALID_HANDLE_VALUE) {
/* invalid search pattern? */
free (dirp);
return;
}
/* there is an un-processed directory entry in memory now */
dirp->cached = 1;
}

28
src/common/dirent.h Normal file
View File

@@ -0,0 +1,28 @@
#ifndef DIRENT_H
#define DIRENT_H
#include <windows.h>
#include <string.h>
#include <assert.h>
typedef struct dirent
{
char d_name[MAX_PATH + 1]; /* current dir entry (multi-byte char string) */
WIN32_FIND_DATAA data; /* file attributes */
} dirent;
typedef struct DIR
{
dirent current; /* Current directory entry */
int cached; /* Indicates un-processed entry in memory */
HANDLE search_handle; /* File search handle */
char patt[MAX_PATH + 3]; /* search pattern (3 = pattern + "\\*\0") */
} DIR;
/* Forward declarations */
DIR *opendir (const char *dirname);
struct dirent *readdir (DIR *dirp);
int closedir (DIR *dirp);
void rewinddir(DIR* dirp);
#endif /*DIRENT_H*/

View File

@@ -19,7 +19,6 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

View File

@@ -21,7 +21,6 @@
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h>
#define WANTARPA

View File

@@ -24,9 +24,8 @@
#ifdef USE_IPV6
#include <winsock2.h>
#include <ws2tcpip.h>
#include <tpipv6.h>
#else
#include <winsock.h>
#include <winsock2.h>
#endif
#define set_blocking(sok) { \

45
src/common/makefile.mak Normal file
View File

@@ -0,0 +1,45 @@
include "..\makeinc.mak"
COMMON_OBJECTS = \
cfgfiles.obj \
chanopt.obj \
ctcp.obj \
dcc.obj \
dirent.obj \
history.obj \
ignore.obj \
inbound.obj \
modes.obj \
network.obj \
notify.obj \
outbound.obj \
plugin.obj \
plugin-timer.obj \
proto-irc.obj \
server.obj \
servlist.obj \
ssl.obj \
text.obj \
thread.obj \
tree.obj \
url.obj \
userlist.obj \
util.obj \
wdkutil.obj \
xchat.obj
all: $(COMMON_OBJECTS) xchatcommon.lib dirent.lib
xchatcommon.lib: $(COMMON_OBJECTS)
lib /nologo /out:xchatcommon.lib $(COMMON_OBJECTS)
dirent.lib: dirent.obj
lib /nologo /out:dirent.lib dirent.obj
.c.obj::
$(CC) $(CFLAGS) $(GLIB) $<
clean:
@del *.obj
@del xchatcommon.lib
@del dirent.lib

View File

@@ -26,7 +26,6 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#define WANTSOCKET

View File

@@ -21,7 +21,6 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <glib.h>
#include "../../config.h" /* grab USE_IPV6 and LOOKUPD defines */

View File

@@ -22,7 +22,6 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#include "xchat.h"

View File

@@ -32,7 +32,6 @@
#include <sys/wait.h>
#endif
#include <unistd.h>
#include <time.h>
#include <signal.h>
#include <sys/stat.h>

View File

@@ -1,7 +1,7 @@
#include <stdlib.h>
#include <string.h>
#include <glib.h>
#include "xchat-plugin.h"
#include "../../plugins/xchat-plugin.h"
#ifdef WIN32
#define strcasecmp stricmp

View File

@@ -34,7 +34,7 @@
#include "text.h"
#define PLUGIN_C
typedef struct session xchat_context;
#include "xchat-plugin.h"
#include "../../plugins/xchat-plugin.h"
#include "plugin.h"
@@ -996,13 +996,16 @@ xchat_get_info (xchat_plugin *ph, const char *id)
return XCHATLIBDIR;
case 0x14f51cd8: /* version */
return PACKAGE_VERSION;
return XCHAT_RELEASE;
case 0xdd9b1abd: /* xchatdir */
return get_xdir_utf8 ();
case 0xe33f6c4a: /* xchatdirfs */
return get_xdir_fs ();
case 0x3d1e70d7: /* wdk_version */
return PACKAGE_VERSION;
}
sess = ph->context;

View File

@@ -18,7 +18,6 @@
/* IRC RFC1459(+commonly used extensions) protocol implementation */
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

View File

@@ -26,7 +26,6 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
@@ -845,33 +844,6 @@ server_flush_queue (server *serv)
fe_set_throttle (serv);
}
#ifdef WIN32
static int
waitline2 (GIOChannel *source, char *buf, int bufsize)
{
int i = 0;
int len;
while (1)
{
if (g_io_channel_read (source, &buf[i], 1, &len) != G_IO_ERROR_NONE)
return -1;
if (buf[i] == '\n' || bufsize == i + 1)
{
buf[i] = 0;
return i;
}
i++;
}
}
#else
#define waitline2(source,buf,size) waitline(serv->childread,buf,size,0)
#endif
/* connect() successed */
static void
@@ -1395,12 +1367,7 @@ base64_encode (char *to, char *from, unsigned int len)
static int
http_read_line (int print_fd, int sok, char *buf, int len)
{
#ifdef WIN32
/* make sure waitline() uses recv() or it'll fail on win32 */
len = waitline (sok, buf, len, FALSE);
#else
len = waitline (sok, buf, len, TRUE);
#endif
if (len >= 1)
{
/* print the message out (send it to the parent process) */
@@ -1524,9 +1491,10 @@ server_child (server * serv)
if (!serv->dont_use_proxy) /* blocked in serverlist? */
{
if (FALSE)
{
;
#ifdef USE_LIBPROXY
else if (prefs.proxy_type == 5)
} else if (prefs.proxy_type == 5)
{
char **proxy_list;
char *url, *proxy;
@@ -1795,7 +1763,7 @@ server_connect (server *serv, char *hostname, int port, int no_login)
}
#endif
serv->childpid = pid;
serv->iotag = fe_input_add (serv->childread, FIA_READ, server_read_child,
serv->iotag = fe_input_add (serv->childread, FIA_READ|FIA_FD, server_read_child,
serv);
}

View File

@@ -21,7 +21,6 @@
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include "xchat.h"
#include <glib/ghash.h>

View File

@@ -17,12 +17,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#include "inet.h" /* make it first to avoid macro redefinitions */
#include <openssl/ssl.h> /* SSL_() */
#include <openssl/err.h> /* ERR_() */
#include <time.h> /* asctime() */
#include <string.h> /* strncpy() */
#include "ssl.h" /* struct cert_info */
#include "inet.h"
#include "../../config.h" /* HAVE_SNPRINTF */
#ifndef HAVE_SNPRINTF

View File

@@ -19,13 +19,11 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include <time.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include "xchat.h"
#include <glib/ghash.h>
@@ -271,9 +269,6 @@ scrollback_load (session *sess)
char *text;
time_t stamp;
int lines;
char *map, *end_map;
struct stat statbuf;
const char *begin, *eol;
if (sess->text_scrollback == SET_DEFAULT)
{
@@ -293,32 +288,9 @@ scrollback_load (session *sess)
if (fh == -1)
return;
if (fstat (fh, &statbuf) < 0)
return;
map = mmap (NULL, statbuf.st_size, PROT_READ, MAP_PRIVATE, fh, 0);
if (map == MAP_FAILED)
return;
end_map = map + statbuf.st_size;
lines = 0;
begin = map;
while (begin < end_map)
while (waitline (fh, buf, sizeof buf, FALSE) != -1)
{
int n_bytes;
eol = memchr (begin, '\n', end_map - begin);
if (!eol)
eol = end_map;
n_bytes = MIN (eol - begin, sizeof (buf) - 1);
strncpy (buf, begin, n_bytes);
buf[n_bytes] = 0;
if (buf[0] == 'T')
{
if (sizeof (time_t) == 4)
@@ -334,8 +306,6 @@ scrollback_load (session *sess)
}
lines++;
}
begin = eol + 1;
}
sess->scrollwritten = lines;
@@ -349,7 +319,6 @@ scrollback_load (session *sess)
/*EMIT_SIGNAL (XP_TE_GENMSG, sess, "*", buf, NULL, NULL, NULL, 0);*/
}
munmap (map, statbuf.st_size);
close (fh);
}

33
src/common/thread.c Normal file
View File

@@ -0,0 +1,33 @@
#include <fcntl.h>
#include "thread.h"
thread *
thread_new (void)
{
thread *th;
th = calloc (1, sizeof (*th));
if (!th)
{
return NULL;
}
if (_pipe (th->pipe_fd, 4096, _O_BINARY) == -1)
{
free (th);
return NULL;
}
return th;
}
int
thread_start (thread *th, void *(*start_routine)(void *), void *arg)
{
DWORD id;
CloseHandle (CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)start_routine, arg, 0, (DWORD *)&id));
th->threadid = id;
return 1;
}

10
src/common/thread.h Normal file
View File

@@ -0,0 +1,10 @@
#include <windows.h>
typedef struct
{
DWORD threadid;
int pipe_fd[2];
} thread;
thread *thread_new (void);
int thread_start (thread *th, void *(*start_routine)(void *), void *arg);

View File

@@ -16,11 +16,13 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#define WANTSOCKET
#include "inet.h" /* make it first to avoid macro redefinitions */
#define __APPLE_API_STRICT_CONFORMANCE
#define _FILE_OFFSET_BITS 64
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
@@ -35,7 +37,7 @@
#include <sys/utsname.h>
#endif
#include <fcntl.h>
#include <dirent.h>
#include "dirent.h"
#include <errno.h>
#include "xchat.h"
#include "xchatc.h"
@@ -44,9 +46,6 @@
#include "util.h"
#include "../../config.h"
#define WANTSOCKET
#include "inet.h"
#if defined (USING_FREEBSD) || defined (__APPLE__)
#include <sys/sysctl.h>
#endif
@@ -54,9 +53,11 @@
#include <socks.h>
#endif
#ifndef ENABLE_NLS
#ifndef HAVE_SNPRINTF
#define snprintf g_snprintf
#endif
#endif
#ifdef USE_DEBUG
@@ -383,6 +384,28 @@ waitline (int sok, char *buf, int bufsize, int use_recv)
}
}
#ifdef WIN32
/* waitline2 using win32 file descriptor and glib instead of _read. win32 can't _read() sok! */
int
waitline2 (GIOChannel *source, char *buf, int bufsize)
{
int i = 0;
int len;
while (1)
{
if (g_io_channel_read (source, &buf[i], 1, &len) != G_IO_ERROR_NONE)
return -1;
if (buf[i] == '\n' || bufsize == i + 1)
{
buf[i] = 0;
return i;
}
i++;
}
}
#endif
/* checks for "~" in a file and expands */
char *
@@ -628,26 +651,79 @@ char *
get_cpu_str (void)
{
static char verbuf[64];
OSVERSIONINFO osvi;
SYSTEM_INFO si;
static char winver[20];
OSVERSIONINFOEX osvi;
double mhz;
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
GetVersionEx (&osvi);
GetSystemInfo (&si);
switch (osvi.dwMajorVersion)
{
case 5:
switch (osvi.dwMinorVersion)
{
case 1:
strcpy (winver, "XP");
break;
case 2:
if (osvi.wProductType == VER_NT_WORKSTATION)
{
strcpy (winver, "XP x64 Edition");
}
else
{
if (GetSystemMetrics(SM_SERVERR2) == 0)
{
strcpy (winver, "Server 2003");
}
else
{
strcpy (winver, "Server 2003 R2");
}
}
break;
}
break;
case 6:
switch (osvi.dwMinorVersion)
{
case 0:
if (osvi.wProductType == VER_NT_WORKSTATION)
{
strcpy (winver, "Vista");
}
else
{
strcpy (winver, "Server 2008");
}
break;
case 1:
if (osvi.wProductType == VER_NT_WORKSTATION)
{
strcpy (winver, "7");
}
else
{
strcpy (winver, "Server 2008 R2");
}
break;
}
break;
}
mhz = get_mhz ();
if (mhz)
{
double cpuspeed = ( mhz > 1000 ) ? mhz / 1000 : mhz;
const char *cpuspeedstr = ( mhz > 1000 ) ? "GHz" : "MHz";
sprintf (verbuf, "Windows %ld.%ld [i%d86/%.2f%s]",
osvi.dwMajorVersion, osvi.dwMinorVersion, si.wProcessorLevel,
cpuspeed, cpuspeedstr);
} else
sprintf (verbuf, "Windows %ld.%ld [i%d86]",
osvi.dwMajorVersion, osvi.dwMinorVersion, si.wProcessorLevel);
sprintf (verbuf, "Windows %s [%.2f%s]", winver, cpuspeed, cpuspeedstr);
}
else
{
sprintf (verbuf, "Windows %s", winver);
}
return verbuf;
}

View File

@@ -43,6 +43,11 @@ int strip_color2 (const char *src, int len, char *dst, int flags);
int strip_hidden_attribute (char *src, char *dst);
char *errorstring (int err);
int waitline (int sok, char *buf, int bufsize, int);
#ifdef WIN32
int waitline2 (GIOChannel *source, char *buf, int bufsize);
#else
#define waitline2(source,buf,size) waitline(serv->childread,buf,size,0)
#endif
unsigned long make_ping_time (void);
void move_file_utf8 (char *src_dir, char *dst_dir, char *fname, int dccpermissions);
int mkdir_utf8 (char *dir);

27
src/common/wdkutil.c Normal file
View File

@@ -0,0 +1,27 @@
#include <io.h>
int
portable_mode ()
{
if ((_access( "portable-mode", 0 )) != -1)
{
return 1;
}
else
{
return 0;
}
}
int
xtray_mode ()
{
if ((_access( "plugins/xtray.dll", 0 )) != -1)
{
return 1;
}
else
{
return 0;
}
}

2
src/common/wdkutil.h Normal file
View File

@@ -0,0 +1,2 @@
int portable_mode ();
int xtray_mode ();

View File

@@ -22,7 +22,6 @@
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#define WANTSOCKET
#include "inet.h"
@@ -38,7 +37,7 @@
#include "cfgfiles.h"
#include "chanopt.h"
#include "ignore.h"
#include "xchat-plugin.h"
#include "../../plugins/xchat-plugin.h"
#include "plugin.h"
#include "plugin-timer.h"
#include "notify.h"
@@ -590,6 +589,7 @@ static char defaultconf_commands[] =
"NAME DMSG\n" "CMD msg =%2 &3\n\n"\
"NAME EXIT\n" "CMD quit\n\n"\
"NAME GREP\n" "CMD lastlog -r &2\n\n"\
"NAME IGNALL\n" "CMD ignore %2!*@* ALL\n\n"\
"NAME J\n" "CMD join &2\n\n"\
"NAME KILL\n" "CMD quote KILL %2 :&3\n\n"\
"NAME LEAVE\n" "CMD part &2\n\n"\

View File

@@ -12,12 +12,14 @@
#include "history.h"
#ifndef ENABLE_NLS
#ifndef HAVE_SNPRINTF
#define snprintf g_snprintf
#endif
#ifndef HAVE_VSNPRINTF
#define vsnprintf g_vsnprintf
#define vsnprintf _vsnprintf
#endif
#endif
#ifdef USE_DEBUG
@@ -58,7 +60,7 @@ void *xchat_realloc (char *old, int len, char *file, int line);
#ifdef WIN32 /* for win32 */
#define OFLAGS O_BINARY
#define sleep(t) _sleep(t*1000)
#define sleep(t) Sleep(t*1000)
#include <direct.h>
#define F_OK 0
#define X_OK 1
@@ -209,6 +211,9 @@ struct xchatprefs
unsigned int wallops;
unsigned int skipmotd;
unsigned int autorejoin;
unsigned int autocopy_text;
unsigned int autocopy_stamp;
unsigned int autocopy_color;
unsigned int colorednicks;
unsigned int chanmodebuttons;
unsigned int userlistbuttons;
@@ -297,6 +302,9 @@ struct xchatprefs
unsigned int confmode;
unsigned int utf8_locale;
unsigned int identd;
unsigned int emoticons;
unsigned int tab_icons;
unsigned int tab_xp;
unsigned int ctcp_number_limit; /*flood */
unsigned int ctcp_time_limit; /*seconds of floods */