%% options
copyright owner = Dirk Krause
copyright year = 2015-xxxx
license = bsd
%% header
/** @file
File statistics (using stat() and
lstat() functions, 8 bit characters).
Note: The stat() and lstat() functions are sufficient for
non-Windows systems.
On Windows systems the st_dev and st_ino components may contain
dummy contents, the stat structure does not contain information
about symbolic links.
For a portable (both Windows and non-Windows) check whether a file
is a symbolic link, reparse point... use the dk4_file_info_t
data type from dk4fileit.h and the functions from dk4filei.h.
CRT on Windows: Required.
*/
#include "dk4statt.h"
#ifndef DK4ERROR_H_INCLUDED
#include "dk4error.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
/** Retrieve information about a file using stat/stat64/_stat64.
@param dst Structure to fill with information.
@param path File name.
@param erp Error report, may be NULL.
@return 1 on success, 0 on error.
Error codes:
- DK4_E_INVALID_ARGUMENTS
if dst or path is NULL,
- DK4_E_SYSTEM
with errno value stored in iDetails1 if the stat() function fails.
*/
int
dk4stat_c8(dk4_stat_t *dst, const char *path, dk4_er_t *erp);
/** Retrieve information about a file using lstat/lstat64.
@param dst Structure to fill with information.
@param path File name.
@param erp Error report, may be NULL.
@return 1 on success, 0 on error.
Error codes:
- DK4_E_NOT_SUPPORTED
if there is no support for lstat(),
- DK4_E_INVALID_ARGUMENTS
if dst or path is NULL,
- DK4_E_SYSTEM
with errno value stored in iDetails1 if lstat() fails.
*/
int
dk4stat_l_c8(dk4_stat_t *dst, const char *path, dk4_er_t *erp);
#ifdef __cplusplus
}
#endif
%% module
#include "dk4stat8.h"
#include "dk4mem.h"
#if DK4_HAVE_ERRNO_H
#ifndef ERRNO_H_INCLUDED
#include
#define ERRNO_H_INCLUDED 1
#endif
#endif
#if DK4_HAVE_UNISTD_H
#ifndef UNISTD_H_INCLUDED
#include
#define UNISTD_H_INCLUDED 1
#endif
#endif
#if DK4_HAVE_IO_H
#ifndef IO_H_INCLUDED
#include
#define IO_H_INCLUDED 1
#endif
#endif
$!trace-include
int
dk4stat_c8(dk4_stat_t *dst, const char *path, dk4_er_t *erp)
{
int back = 0;
if ((NULL != dst) && (NULL != path)) {
errno = 0;
#if DK4_ON_WINDOWS
if (0 == _stat64(path, dst))
#else
#if DK4_HAVE_LARGEFILE64_SOURCE && DK4_HAVE_STAT64
if (0 == stat64(path, dst))
#else
if (0 == stat(path, dst))
#endif
#endif
{
back = 1;
}
else
{
dk4error_set_idetails(erp, DK4_E_SYSTEM, errno);
}
} else {
dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
}
return back;
}
int
dk4stat_l_c8(dk4_stat_t *dst, const char *path, dk4_er_t *erp)
{
int back = 0;
if ((NULL != dst) && (NULL != path)) {
#if DK4_ON_WINDOWS
dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED);
#else
#if DK4_HAVE_LARGEFILE64_SOURCE && DK4_HAVE_STAT64
#if DK4_HAVE_LSTAT64
errno = 0;
if (0 == lstat64(path, dst)) {
back = 1;
} else {
dk4error_set_idetails(erp, DK4_E_SYSTEM, errno);
}
#else
dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED);
#endif
#else
#if DK4_HAVE_LSTAT
errno = 0;
if (0 == lstat(path, dst)) {
back = 1;
} else {
dk4error_set_idetails(erp, DK4_E_SYSTEM, errno);
}
#else
dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED);
#endif
#endif
#endif
} else {
dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
}
return back;
}