Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F2921709
compat.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
compat.h
View Options
#ifndef ANT_COMPAT_H
#define ANT_COMPAT_H
#if defined(__linux__) && !defined(_GNU_SOURCE)
#define _GNU_SOURCE
#endif
#include
<time.h>
#include
<string.h>
#include
<stdlib.h>
#ifndef PATH_MAX
#ifdef _WIN32
#define PATH_MAX MAX_PATH
#else
#define PATH_MAX 4096
#endif
#endif
#ifdef _WIN32
#include
<winsock2.h>
#include
<windows.h>
#include
<io.h>
#include
<direct.h>
static
inline
char
*
compat_realpath
(
const
char
*
path
,
char
*
resolved
)
{
char
*
allocated
=
NULL
;
if
(
resolved
==
NULL
)
{
resolved
=
malloc
(
MAX_PATH
);
if
(
resolved
==
NULL
)
return
NULL
;
allocated
=
resolved
;
}
DWORD
len
=
GetFullPathNameA
(
path
,
MAX_PATH
,
resolved
,
NULL
);
if
(
len
==
0
||
len
>
MAX_PATH
)
{
if
(
allocated
!=
NULL
)
free
(
allocated
);
return
NULL
;
}
DWORD
attr
=
GetFileAttributesA
(
resolved
);
if
(
attr
==
INVALID_FILE_ATTRIBUTES
)
{
if
(
allocated
!=
NULL
)
free
(
allocated
);
return
NULL
;
}
return
resolved
;
}
static
inline
time_t
compat_timegm
(
struct
tm
*
tm
)
{
return
_mkgmtime
(
tm
);
}
static
inline
int
compat_usleep
(
unsigned
int
us
)
{
Sleep
((
us
+
999
)
/
1000
);
return
0
;
}
static
inline
unsigned
int
compat_sleep
(
unsigned
int
seconds
)
{
Sleep
(
seconds
*
1000
);
return
0
;
}
#include
<process.h>
#define getpid _getpid
struct
timeval
{
long
tv_sec
;
long
tv_usec
;
};
static
inline
int
compat_gettimeofday
(
struct
timeval
*
tv
,
void
*
tz
)
{
(
void
)
tz
;
FILETIME
ft
;
ULARGE_INTEGER
ull
;
GetSystemTimeAsFileTime
(
&
ft
);
ull
.
LowPart
=
ft
.
dwLowDateTime
;
ull
.
HighPart
=
ft
.
dwHighDateTime
;
ull
.
QuadPart
-=
116444736000000000ULL
;
tv
->
tv_sec
=
(
long
)(
ull
.
QuadPart
/
10000000
);
tv
->
tv_usec
=
(
long
)((
ull
.
QuadPart
%
10000000
)
/
10
);
return
0
;
}
#define gettimeofday compat_gettimeofday
static
inline
char
*
compat_strndup
(
const
char
*
s
,
size_t
n
)
{
size_t
len
=
strnlen
(
s
,
n
);
char
*
dup
=
malloc
(
len
+
1
);
if
(
dup
)
{
memcpy
(
dup
,
s
,
len
);
dup
[
len
]
=
'\0'
;
}
return
dup
;
}
static
inline
void
*
compat_memmem
(
const
void
*
haystack
,
size_t
h_len
,
const
void
*
needle
,
size_t
n_len
)
{
const
char
*
h
=
haystack
;
const
char
*
last
=
h
+
h_len
-
n_len
;
const
char
*
n
=
needle
;
char
first
;
if
(
n_len
==
0
)
return
(
void
*
)
h
;
if
(
h_len
<
n_len
)
return
NULL
;
if
(
n_len
==
1
)
return
memchr
(
haystack
,
*
n
,
h_len
);
first
=
*
n
++
;
for
(;
h
<=
last
;
h
++
)
if
(
*
h
==
first
&&
!
memcmp
(
h
+
1
,
n
,
n_len
-
1
))
return
(
void
*
)
h
;
return
NULL
;
}
static
inline
char
*
compat_basename
(
char
*
path
)
{
if
(
!
path
||
!*
path
)
return
"."
;
char
*
p
=
path
+
strlen
(
path
)
-
1
;
while
(
p
>
path
&&
(
*
p
==
'/'
||
*
p
==
'\\'
))
*
p
--
=
'\0'
;
while
(
p
>
path
&&
*
p
!=
'/'
&&
*
p
!=
'\\'
)
p
--
;
return
(
p
>
path
)
?
p
+
1
:
path
;
}
static
inline
char
*
compat_dirname
(
char
*
path
)
{
if
(
!
path
||
!*
path
)
return
"."
;
char
*
p
=
path
+
strlen
(
path
)
-
1
;
while
(
p
>
path
&&
(
*
p
==
'/'
||
*
p
==
'\\'
))
*
p
--
=
'\0'
;
while
(
p
>
path
&&
*
p
!=
'/'
&&
*
p
!=
'\\'
)
p
--
;
if
(
p
==
path
)
{
if
(
*
p
==
'/'
||
*
p
==
'\\'
)
return
(
*
p
==
'/'
)
?
"/"
:
"
\\
"
;
return
"."
;
}
*
p
=
'\0'
;
return
path
;
}
#define realpath compat_realpath
#define timegm compat_timegm
#define usleep compat_usleep
#define sleep compat_sleep
#define strndup compat_strndup
#define memmem compat_memmem
#define basename compat_basename
#define dirname compat_dirname
typedef
unsigned
int
useconds_t
;
typedef
unsigned
int
uid_t
;
typedef
unsigned
int
gid_t
;
#else
#include
<unistd.h>
#include
<libgen.h>
#include
<sys/time.h>
#endif
#endif
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Fri, Mar 27, 10:31 AM (2 d)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
512802
Default Alt Text
compat.h (3 KB)
Attached To
Mode
rANT Ant
Attached
Detach File
Event Timeline
Log In to Comment