summaryrefslogtreecommitdiff
path: root/src/htsthread.c
diff options
context:
space:
mode:
authorXavier Roche <xroche@users.noreply.github.com>2012-03-19 12:36:11 +0000
committerXavier Roche <xroche@users.noreply.github.com>2012-03-19 12:36:11 +0000
commitad5b7acc19290ff91e0f42a0de448a26760fcf99 (patch)
tree2d1867758835fd0c4e443ff3cc7e5c774af85874 /src/htsthread.c
Imported httrack 3.20.2
Diffstat (limited to 'src/htsthread.c')
-rw-r--r--src/htsthread.c97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/htsthread.c b/src/htsthread.c
new file mode 100644
index 0000000..0a3bee6
--- /dev/null
+++ b/src/htsthread.c
@@ -0,0 +1,97 @@
+/* ------------------------------------------------------------ */
+/*
+HTTrack Website Copier, Offline Browser for Windows and Unix
+Copyright (C) Xavier Roche and other contributors
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+Important notes:
+
+- We hereby ask people using this source NOT to use it in purpose of grabbing
+emails addresses, or collecting any other private information on persons.
+This would disgrace our work, and spoil the many hours we spent on it.
+
+
+Please visit our Website: http://www.httrack.com
+*/
+
+
+/* ------------------------------------------------------------ */
+/* File: Threads */
+/* Author: Xavier Roche */
+/* ------------------------------------------------------------ */
+
+
+#include "htsglobal.h"
+#include "htsthread.h"
+
+// Threads - emulate _beginthread under Linux/Unix using pthread_XX
+// Some changes will have to be done, see PTHREAD_RETURN,PTHREAD_TYPE
+#if USE_PTHREAD
+#include <pthread.h> /* _beginthread, _endthread */
+
+unsigned long _beginthread( void* ( *start_address )( void * ), unsigned stack_size, void *arglist )
+{
+ pthread_t th;
+ int retcode;
+ /* create a thread */
+ retcode = pthread_create(&th, NULL, start_address, arglist);
+ if (retcode != 0) /* error */
+ return -1;
+ /* detach the thread from the main process so that is can be independent */
+ pthread_detach(th);
+ return 0;
+}
+#endif
+
+#if USE_BEGINTHREAD
+/*
+ Simple lock function
+
+ Return value: always 0
+ Parameter:
+ 1 wait for lock (mutex) available and lock it
+ 0 unlock the mutex
+ [-1 check if locked (always return 0 with mutex)]
+ -999 initialize
+*/
+int htsSetLock(PTHREAD_LOCK_TYPE* hMutex,int lock) {
+#if HTS_WIN
+ /* lock */
+ if (lock==1)
+ WaitForSingleObject(*hMutex,INFINITE);
+ /* unlock */
+ else if (lock==0)
+ ReleaseMutex(*hMutex);
+ /* create */
+ else if (lock==-999)
+ *hMutex=CreateMutex(NULL,FALSE,NULL);
+#else
+ /* lock */
+ if (lock==1)
+ pthread_mutex_lock(hMutex);
+ /* unlock */
+ else if (lock==0)
+ pthread_mutex_unlock(hMutex);
+ /* create */
+ else if (lock==-999)
+ pthread_mutex_init(hMutex,0);
+#endif
+ return 0;
+}
+
+#endif
+