mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-12 08:40:19 +00:00
add wdk changes to named branch
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
199
src/common/dirent.c
Normal 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
28
src/common/dirent.h
Normal 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*/
|
||||
@@ -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>
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
|
||||
#define WANTARPA
|
||||
|
||||
@@ -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
45
src/common/makefile.mak
Normal 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
|
||||
@@ -26,7 +26,6 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#define WANTSOCKET
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "xchat.h"
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
#include <sys/wait.h>
|
||||
#endif
|
||||
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
#include <signal.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
|
||||
/* IRC RFC1459(+commonly used extensions) protocol implementation */
|
||||
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
33
src/common/thread.c
Normal 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
10
src/common/thread.h
Normal 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);
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
27
src/common/wdkutil.c
Normal 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
2
src/common/wdkutil.h
Normal file
@@ -0,0 +1,2 @@
|
||||
int portable_mode ();
|
||||
int xtray_mode ();
|
||||
@@ -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"\
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user