7027f508c7
In 554544276a
(*.[ch]: remove extern from function declarations using
spatch, 2019-04-29), we removed externs from function declarations using
spatch but we intentionally excluded files under compat/ since some are
directly copied from an upstream and we should avoid churning them so
that manually merging future updates will be simpler.
In the last commit, we determined the files which taken from an upstream
so we can exclude them and run spatch on the remainder.
This was the Coccinelle patch used:
@@
type T;
identifier f;
@@
- extern
T f(...);
and it was run with:
$ git ls-files compat/\*\*.{c,h} |
xargs spatch --sp-file contrib/coccinelle/noextern.cocci --in-place
$ git checkout -- \
compat/regex/ \
compat/inet_ntop.c \
compat/inet_pton.c \
compat/nedmalloc/ \
compat/obstack.{c,h} \
compat/poll/
Coccinelle has some trouble dealing with `__attribute__` and varargs so
we ran the following to ensure that no remaining changes were left
behind:
$ git ls-files compat/\*\*.{c,h} |
xargs sed -i'' -e 's/^\(\s*\)extern \([^(]*([^*]\)/\1\2/'
$ git checkout -- \
compat/regex/ \
compat/inet_ntop.c \
compat/inet_pton.c \
compat/nedmalloc/ \
compat/obstack.{c,h} \
compat/poll/
Signed-off-by: Denton Liu <liu.denton@gmail.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
101 lines
2.5 KiB
C
101 lines
2.5 KiB
C
/*
|
|
* Header used to adapt pthread-based POSIX code to Windows API threads.
|
|
*
|
|
* Copyright (C) 2009 Andrzej K. Haczewski <ahaczewski@gmail.com>
|
|
*/
|
|
|
|
#ifndef PTHREAD_H
|
|
#define PTHREAD_H
|
|
|
|
#ifndef WIN32_LEAN_AND_MEAN
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#endif
|
|
|
|
#include <windows.h>
|
|
|
|
/*
|
|
* Defines that adapt Windows API threads to pthreads API
|
|
*/
|
|
#define pthread_mutex_t CRITICAL_SECTION
|
|
|
|
static inline int return_0(int i) {
|
|
return 0;
|
|
}
|
|
#define pthread_mutex_init(a,b) return_0((InitializeCriticalSection((a)), 0))
|
|
#define pthread_mutex_destroy(a) DeleteCriticalSection((a))
|
|
#define pthread_mutex_lock EnterCriticalSection
|
|
#define pthread_mutex_unlock LeaveCriticalSection
|
|
|
|
typedef int pthread_mutexattr_t;
|
|
#define pthread_mutexattr_init(a) (*(a) = 0)
|
|
#define pthread_mutexattr_destroy(a) do {} while (0)
|
|
#define pthread_mutexattr_settype(a, t) 0
|
|
#define PTHREAD_MUTEX_RECURSIVE 0
|
|
|
|
#define pthread_cond_t CONDITION_VARIABLE
|
|
|
|
#define pthread_cond_init(a,b) InitializeConditionVariable((a))
|
|
#define pthread_cond_destroy(a) do {} while (0)
|
|
#define pthread_cond_wait(a,b) return_0(SleepConditionVariableCS((a), (b), INFINITE))
|
|
#define pthread_cond_signal WakeConditionVariable
|
|
#define pthread_cond_broadcast WakeAllConditionVariable
|
|
|
|
/*
|
|
* Simple thread creation implementation using pthread API
|
|
*/
|
|
typedef struct {
|
|
HANDLE handle;
|
|
void *(*start_routine)(void*);
|
|
void *arg;
|
|
DWORD tid;
|
|
} pthread_t;
|
|
|
|
int pthread_create(pthread_t *thread, const void *unused,
|
|
void *(*start_routine)(void*), void *arg);
|
|
|
|
/*
|
|
* To avoid the need of copying a struct, we use small macro wrapper to pass
|
|
* pointer to win32_pthread_join instead.
|
|
*/
|
|
#define pthread_join(a, b) win32_pthread_join(&(a), (b))
|
|
|
|
int win32_pthread_join(pthread_t *thread, void **value_ptr);
|
|
|
|
#define pthread_equal(t1, t2) ((t1).tid == (t2).tid)
|
|
pthread_t pthread_self(void);
|
|
|
|
static inline void NORETURN pthread_exit(void *ret)
|
|
{
|
|
ExitThread((DWORD)(intptr_t)ret);
|
|
}
|
|
|
|
typedef DWORD pthread_key_t;
|
|
static inline int pthread_key_create(pthread_key_t *keyp, void (*destructor)(void *value))
|
|
{
|
|
return (*keyp = TlsAlloc()) == TLS_OUT_OF_INDEXES ? EAGAIN : 0;
|
|
}
|
|
|
|
static inline int pthread_key_delete(pthread_key_t key)
|
|
{
|
|
return TlsFree(key) ? 0 : EINVAL;
|
|
}
|
|
|
|
static inline int pthread_setspecific(pthread_key_t key, const void *value)
|
|
{
|
|
return TlsSetValue(key, (void *)value) ? 0 : EINVAL;
|
|
}
|
|
|
|
static inline void *pthread_getspecific(pthread_key_t key)
|
|
{
|
|
return TlsGetValue(key);
|
|
}
|
|
|
|
#ifndef __MINGW64_VERSION_MAJOR
|
|
static inline int pthread_sigmask(int how, const sigset_t *set, sigset_t *oset)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
#endif /* PTHREAD_H */
|