/* -------------------- f_size.h --------------------------- */
/* (see also: f_size.c furtehr below) */
#ifdef _cplusplus
extern "C" {
#endif
#ifndef FSIZE_H
#define FSIZE_H
#if defined(_WIN32) || defined(_WIN64) || defined(__WINDOWS__) || defined(__TOS_WIN__)
#define OS_FSIZE_WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#elif defined(__linux__) || defined(__unix__) || defined(__unix) \
|| defined(__CYGWIN__) || (defined(__APPLE__) && defined(__MACH__))
#define OS_FSIZE_POSIX
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#endif
#include <inttypes.h>
extern int64_t f_size( const char *fname );
#endif
#ifdef _cplusplus
}
# endif
/* -------------------- f_size.c --------------------------- */
#include "f_size.h"
#if defined( OS_FSIZE_WIN32 )
int64_t f_size( const char *fname )
{
int64_t fsize = -1;
LARGE_INTEGER nLargeInteger;
HANDLE hFile = CreateFile(
fname,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_READONLY,
NULL
);
if ( hFile != INVALID_HANDLE_VALUE ) {
if ( GetFileSizeEx(hFile, &nLargeInteger) ) {
fsize = (int64_t) nLargeInteger.QuadPart;
}
}
return fsize;
}
#else
int64_t f_size( const char *fname )
{
struct stat64 info;
if ( 0 == stat64(fname, &info) ) {
return info.st_size;
}
return -1;
}
#endif
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gZl9zaXplLmggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgIChzZWUgYWxzbzogZl9zaXplLmMgZnVydGVociBiZWxvdykgICAgICAgICAgICAgICAqLwoKI2lmZGVmIF9jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgoKI2lmbmRlZiBGU0laRV9ICiNkZWZpbmUgRlNJWkVfSAoKI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkgfHwgZGVmaW5lZChfX1dJTkRPV1NfXykgfHwgZGVmaW5lZChfX1RPU19XSU5fXykKCgkjZGVmaW5lIE9TX0ZTSVpFX1dJTjMyCgkjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KCSNpbmNsdWRlIDx3aW5kb3dzLmg+CgojZWxpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX3VuaXhfXykgfHwgZGVmaW5lZChfX3VuaXgpIAkJXAp8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IChkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX01BQ0hfXykpCgoJI2RlZmluZSBPU19GU0laRV9QT1NJWAoKCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KCSNpbmNsdWRlIDxzeXMvc3RhdC5oPgoJI2luY2x1ZGUgPHVuaXN0ZC5oPgoKI2VuZGlmCgojaW5jbHVkZSA8aW50dHlwZXMuaD4KCmV4dGVybiBpbnQ2NF90IGZfc2l6ZSggY29uc3QgY2hhciAqZm5hbWUgKTsKI2VuZGlmCgojaWZkZWYgX2NwbHVzcGx1cwp9CiMgZW5kaWYKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIGZfc2l6ZS5jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKI2luY2x1ZGUgImZfc2l6ZS5oIgoKI2lmIGRlZmluZWQoIE9TX0ZTSVpFX1dJTjMyICkKaW50NjRfdCBmX3NpemUoIGNvbnN0IGNoYXIgKmZuYW1lICkKewoJaW50NjRfdCBmc2l6ZSA9IC0xOwoKCUxBUkdFX0lOVEVHRVIgbkxhcmdlSW50ZWdlcjsKCUhBTkRMRSBoRmlsZSA9IENyZWF0ZUZpbGUoCgkJCWZuYW1lLAoJCQlHRU5FUklDX1JFQUQsCgkJCUZJTEVfU0hBUkVfUkVBRCwKCQkJTlVMTCwKCQkJT1BFTl9FWElTVElORywKCQkJRklMRV9BVFRSSUJVVEVfUkVBRE9OTFksCgkJCU5VTEwKCQkJKTsKCWlmICggaEZpbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUgKSB7CgkJaWYgKCBHZXRGaWxlU2l6ZUV4KGhGaWxlLCAmbkxhcmdlSW50ZWdlcikgKSB7CgkJCWZzaXplID0gKGludDY0X3QpIG5MYXJnZUludGVnZXIuUXVhZFBhcnQ7CgkJfQoJfQoKCXJldHVybiBmc2l6ZTsKfQoKI2Vsc2UKaW50NjRfdCBmX3NpemUoIGNvbnN0IGNoYXIgKmZuYW1lICkKewoJc3RydWN0IHN0YXQ2NCBpbmZvOyAKCWlmICggMCA9PSBzdGF0NjQoZm5hbWUsICZpbmZvKSAgKSB7CgkJcmV0dXJuIGluZm8uc3Rfc2l6ZTsKCX0KCglyZXR1cm4gLTE7Cn0KCiNlbmRpZgo=