From b880db8491271b4bd4aa87c2dd79b5e3c3dde6cf Mon Sep 17 00:00:00 2001 From: watcherhd Date: Thu, 17 Nov 2011 18:46:23 +0000 Subject: added: ieview, imo2sproxy, skype git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@175 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- skype/pthread.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 skype/pthread.c (limited to 'skype/pthread.c') diff --git a/skype/pthread.c b/skype/pthread.c new file mode 100644 index 0000000..f994425 --- /dev/null +++ b/skype/pthread.c @@ -0,0 +1,70 @@ +/* + * $Id: pthread.c,v 1.4 2003/12/19 12:53:36 gena01 Exp $ + * + * Skype Miranda Plugin + * + * Authors: Gennady Feldman (aka Gena01) + * Laurent Marechal (aka Peorth) + * + * Code borrowed for Skype plugin. Fixed to compile on Mingw by G.Feldman + * Original Copyright (c) 2003 Robert Rainwater + * + * This code is under GPL and is based on AIM, MSN and Miranda source code. + * I want to thank Robert Rainwater and George Hazan for their code and support + * and for answering some of my questions during development of this plugin. + */ + +#include "skype.h" + +/* Gena01 - added some defined to fix compilation with mingw gcc */ +/* __try/__finally taken from abiword patch found on the web */ +#if 0 + #include +#else +#define __try +#define __except(x) if (0) /* don't execute handler */ +#define __finally + +#define _try __try +#define _except __except +#define _finally __finally +#endif + +#include + +struct pthread_arg +{ + HANDLE hEvent; + void (*threadcode) (void *); + void *arg; +}; + +void pthread_r(struct pthread_arg *fa) +{ + void (*callercode) (void *) = fa->threadcode; + void *arg = fa->arg; + CallService(MS_SYSTEM_THREAD_PUSH, 0, 0); + SetEvent(fa->hEvent); + __try { + callercode(arg); + } + __finally { + CallService(MS_SYSTEM_THREAD_POP, 0, 0); + } +} + +unsigned long pthread_create(pThreadFunc parFunc, void *arg) +{ + unsigned long rc; + struct pthread_arg fa; + fa.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); + fa.threadcode = parFunc; + fa.arg = arg; + rc = _beginthread((pThreadFunc) pthread_r, 0, &fa); + if ((unsigned long) -1L != rc) { + WaitForSingleObject(fa.hEvent, INFINITE); + } + CloseHandle(fa.hEvent); + return rc; +} + -- cgit v1.2.3