mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-08 04:52:10 -05:00
fuse: better handling of long (Cygwin64 vs Win64)
This commit is contained in:
parent
300ce8485b
commit
765bb1e1a3
@ -138,6 +138,11 @@ struct fuse_statvfs
|
|||||||
|
|
||||||
#define FSP_FUSE_ENV_INIT { 'C', malloc, free }
|
#define FSP_FUSE_ENV_INIT { 'C', malloc, free }
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note that long is 8 bytes long in Cygwin64 and 4 bytes long in Win64.
|
||||||
|
* For this reason we avoid using long anywhere in these headers.
|
||||||
|
*/
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error unsupported environment
|
#error unsupported environment
|
||||||
#endif
|
#endif
|
||||||
|
@ -23,11 +23,11 @@
|
|||||||
#define fsp_fuse_opt_match_exact ((const char *)1) /* exact option match */
|
#define fsp_fuse_opt_match_exact ((const char *)1) /* exact option match */
|
||||||
#define fsp_fuse_opt_match_next ((const char *)2) /* option match, value is next arg */
|
#define fsp_fuse_opt_match_next ((const char *)2) /* option match, value is next arg */
|
||||||
|
|
||||||
#if 1
|
#if defined(_WIN64)
|
||||||
typedef long int strtoint_result_t;
|
typedef long long strtoint_result_t;
|
||||||
#else
|
#else
|
||||||
/* cannot use long long in 32-bit builds because we are missing symbol __allmul */
|
/* cannot use long long in 32-bit builds because we are missing symbol __allmul */
|
||||||
typedef long long int strtoint_result_t;
|
typedef long strtoint_result_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static strtoint_result_t strtoint(const char *p, const char *endp, int base, int is_signed)
|
static strtoint_result_t strtoint(const char *p, const char *endp, int base, int is_signed)
|
||||||
@ -299,7 +299,17 @@ static int fsp_fuse_opt_process_arg(struct fsp_fuse_env *env,
|
|||||||
else if (2 <= h)
|
else if (2 <= h)
|
||||||
VAR(data, opt, char) = (char)llv;
|
VAR(data, opt, char) = (char)llv;
|
||||||
else if (1 == l)
|
else if (1 == l)
|
||||||
|
{
|
||||||
|
#if defined(_WIN64)
|
||||||
|
/* long is 8 bytes long in Cygwin64 and 4 bytes long in Win64 */
|
||||||
|
if ('C' == env->environment)
|
||||||
|
VAR(data, opt, long long) = (long long)llv;
|
||||||
|
else
|
||||||
|
VAR(data, opt, long) = (long)llv;
|
||||||
|
#else
|
||||||
VAR(data, opt, long) = (long)llv;
|
VAR(data, opt, long) = (long)llv;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
else if (2 <= l)
|
else if (2 <= l)
|
||||||
VAR(data, opt, long long) = (long long)llv;
|
VAR(data, opt, long long) = (long long)llv;
|
||||||
else
|
else
|
||||||
|
@ -303,7 +303,11 @@ void fuse_opt_parse_test(void)
|
|||||||
ASSERT(0 == strcmp("WwWw", data.w));
|
ASSERT(0 == strcmp("WwWw", data.w));
|
||||||
ASSERT(1 == data.x);
|
ASSERT(1 == data.x);
|
||||||
ASSERT((long)040000000001 == data.y);
|
ASSERT((long)040000000001 == data.y);
|
||||||
ASSERT(((long long)0x100000001 & 0xffffffff)== data.z);
|
#if defined(_WIN64)
|
||||||
|
ASSERT((long long)0x100000001 == data.z);
|
||||||
|
#else
|
||||||
|
ASSERT(((long long)0x100000001 & 0xffffffff) == data.z);
|
||||||
|
#endif
|
||||||
ASSERT(+1234567890 == data.dec);
|
ASSERT(+1234567890 == data.dec);
|
||||||
ASSERT(-1234567890 == data.neg);
|
ASSERT(-1234567890 == data.neg);
|
||||||
ASSERT(0xABCDEF == data.hex);
|
ASSERT(0xABCDEF == data.hex);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user