Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/fluidsynth/glib.h
4389 views
1
/*
2
* Copyright 2023 Rémi Bernon for CodeWeavers
3
*
4
* This library is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* This library is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with this library; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17
*/
18
19
#include <stddef.h>
20
#include <stdarg.h>
21
#include <stdio.h>
22
23
#include <windef.h>
24
#include <winbase.h>
25
#include <winsock.h>
26
27
#include <stdint.h>
28
#include <stdlib.h>
29
#include <math.h>
30
31
#define GLIB_CHECK_VERSION(x, y, z) ((x) < GLIB_MAJOR_VERSION || ((x) == GLIB_MAJOR_VERSION && (y) <= GLIB_MINOR_VERSION))
32
#define GLIB_MAJOR_VERSION 2
33
#define GLIB_MINOR_VERSION 54
34
35
#define G_BYTE_ORDER 1234
36
#define G_BIG_ENDIAN 4321
37
#define GINT32_FROM_LE(val) ((INT32)(val))
38
#define GINT16_FROM_LE(val) ((INT16)(val))
39
40
#define G_UNLIKELY(expr) (expr)
41
#define G_LIKELY(expr) (expr)
42
43
#define g_return_val_if_fail( cond, val ) do { if (!(cond)) return (val); } while (0)
44
45
typedef void *gpointer;
46
typedef gpointer (*GThreadFunc)( gpointer data );
47
48
typedef struct _stat64 GStatBuf;
49
#define g_stat _stat64
50
51
typedef struct
52
{
53
const char *message;
54
} GError;
55
56
typedef struct
57
{
58
LONG ref;
59
HANDLE handle;
60
GThreadFunc func;
61
gpointer data;
62
} GThread;
63
64
extern int g_vsnprintf( char *buffer, size_t size, const char *format, va_list args ) __WINE_CRT_PRINTF_ATTR(3, 0);
65
extern int g_snprintf( char *buffer, size_t size, const char *format, ... ) __WINE_CRT_PRINTF_ATTR(3, 4);
66
67
extern double g_get_monotonic_time(void);
68
extern void g_usleep( unsigned int micros );
69
70
extern GThread *g_thread_try_new( const char *name, GThreadFunc func, gpointer data, GError **err );
71
extern void g_thread_unref( GThread *thread );
72
extern void g_thread_join( GThread *thread );
73
extern void g_clear_error( GError **error );
74
75
#define G_FILE_TEST_EXISTS 1
76
#define G_FILE_TEST_IS_REGULAR 2
77
78
extern int g_file_test( const char *path, int test );
79
80
#define g_new( type, count ) calloc( (count), sizeof(type) )
81
static inline void g_free( void *ptr ) { free( ptr ); }
82
83
typedef SRWLOCK GMutex;
84
static inline void g_mutex_init( GMutex *mutex ) {}
85
static inline void g_mutex_clear( GMutex *mutex ) {}
86
static inline void g_mutex_lock( GMutex *mutex ) { AcquireSRWLockExclusive( mutex ); }
87
static inline void g_mutex_unlock( GMutex *mutex ) { ReleaseSRWLockExclusive( mutex ); }
88
89
typedef CRITICAL_SECTION GRecMutex;
90
static inline void g_rec_mutex_init( GRecMutex *mutex ) { InitializeCriticalSection( mutex ); }
91
static inline void g_rec_mutex_clear( GRecMutex *mutex ) { DeleteCriticalSection( mutex ); }
92
static inline void g_rec_mutex_lock( GRecMutex *mutex ) { EnterCriticalSection( mutex ); }
93
static inline void g_rec_mutex_unlock( GRecMutex *mutex ) { LeaveCriticalSection( mutex ); }
94
95
typedef CONDITION_VARIABLE GCond;
96
static inline void g_cond_init( GCond *cond ) {}
97
static inline void g_cond_clear( GCond *cond ) {}
98
static inline void g_cond_signal( GCond *cond ) { WakeConditionVariable( cond ); }
99
static inline void g_cond_broadcast( GCond *cond ) { WakeAllConditionVariable( cond ); }
100
static inline void g_cond_wait( GCond *cond, GMutex *mutex ) { SleepConditionVariableSRW( cond, mutex, INFINITE, 0 ); }
101
102
static inline void g_atomic_int_inc( int *ptr ) { InterlockedIncrement( (LONG *)ptr ); }
103
static inline int g_atomic_int_add( int *ptr, int val ) { return InterlockedAdd( (LONG *)ptr, val ) - 1; }
104
static inline int g_atomic_int_get( int *ptr ) { return ReadAcquire( (LONG *)ptr ); }
105
static inline void g_atomic_int_set( int *ptr, int val ) { InterlockedExchange( (LONG *)ptr, val ); }
106
static inline int g_atomic_int_dec_and_test( int *ptr, int val ) { return !InterlockedAdd( (LONG *)ptr, -val ); }
107
static inline int g_atomic_int_compare_and_exchange( int *ptr, int cmp, int val ) { return InterlockedCompareExchange( (LONG *)ptr, val, cmp ) == cmp; }
108
109