15 #include <sys/types.h> 17 static mcl_error_t _file_util_fstat(
void *file_descriptor,
struct stat *file_attributes);
22 #if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG) 23 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 31 MCL_DEBUG_ENTRY(
"const char *file_name = <%s>, const char *mode = <%s>, void **file_descriptor = <%p>", file_name, mode, file_descriptor);
49 #if defined(WIN32) || defined(WIN64) 50 fopen_s(&file, file_name, mode);
52 file = fopen(file_name, mode);
54 *file_descriptor = file;
90 mcl_error_t result = fclose((FILE *)file_descriptor);
105 #if HAVE_FILE_SYSTEM_ 108 MCL_DEBUG_ENTRY(
"const void *data = <%p>, mcl_size_t size = <%u>, mcl_size_t count = <%u>, void *file_descriptor = <%p>",
109 data, size, count, file_descriptor);
123 #if HAVE_FILE_SYSTEM_ 126 mcl_size_t actual_count = fwrite(data, size, count, (FILE *)file_descriptor);
127 if (count == actual_count)
133 MCL_ERROR(
"Data can not be written to file.");
144 #if HAVE_FILE_SYSTEM_ 145 MCL_DEBUG_ENTRY(
"void *data = <%p>, mcl_size_t size = <%u>, mcl_size_t count = <%u>, void *file_descriptor = <%p>, mcl_size_t *actual_count = <%p>",
146 data, size, count, file_descriptor, actual_count);
148 *actual_count = fread(data, size, count, (FILE *)file_descriptor);
158 #if HAVE_FILE_SYSTEM_ 162 MCL_DEBUG_ENTRY(
"const char *data = <%s>, void *file_descriptor = <%p>", data, file_descriptor);
164 result = fputs(data, (FILE *)file_descriptor);
171 MCL_ERROR(
"Data can not be written to file.");
184 #if HAVE_FILE_SYSTEM_ 188 MCL_DEBUG_ENTRY(
"char *data = <%p>, mcl_size_t data_size = <%u>, void *file_descriptor = <%p>", data, data_size, file_descriptor);
190 output = fgets(data, (
int)data_size, (FILE *)file_descriptor);
210 #if HAVE_FILE_SYSTEM_ 227 #if HAVE_FILE_SYSTEM_ 231 result = fflush((FILE *)file_descriptor);
251 #if HAVE_FILE_SYSTEM_ 256 rewind((FILE *)file_descriptor);
267 #if HAVE_FILE_SYSTEM_ 269 struct stat file_attributes;
274 if (
MCL_OK == _file_util_fstat(file_descriptor, &file_attributes))
276 is_regular_file = S_ISREG(file_attributes.st_mode);
281 return is_regular_file;
290 #if HAVE_FILE_SYSTEM_ 291 struct stat file_attributes;
296 if (
MCL_OK == _file_util_fstat(file_descriptor, &file_attributes))
298 file_size = file_attributes.st_size;
311 #if HAVE_FILE_SYSTEM_ 312 struct stat file_attributes;
317 if (
MCL_OK == _file_util_fstat(file_descriptor, &file_attributes))
319 time = file_attributes.st_ctime;
330 #if HAVE_FILE_SYSTEM_ 331 static mcl_error_t _file_util_fstat(
void *file_descriptor,
struct stat *file_attributes)
336 MCL_DEBUG_ENTRY(
"void *file_descriptor = <%p>, struct stat *file_attributes = <%p>", file_descriptor, file_attributes);
338 #if defined(WIN32) || defined(WIN64) 339 result = fstat(_fileno((FILE *)file_descriptor), file_attributes);
341 result = fstat(fileno((FILE *)file_descriptor), file_attributes);
350 MCL_ERROR(
"Error in retrieving file attributes.");
mcl_error_t mcl_file_util_fopen(const char *file_name, const char *mode, void **file_descriptor)
Assert module header file.
mcl_error_t mcl_file_util_fgets(char *data, mcl_size_t data_size, void *file_descriptor)
mcl_error_t mcl_file_util_fopen_without_log(const char *file_name, const char *mode, void **file_descriptor)
mcl_bool_t mcl_file_util_check_if_regular_file(void *file_descriptor)
#define MCL_DEBUG_ENTRY(...)
mcl_error_t mcl_file_util_fflush_without_log(void *file_descriptor)
#define MCL_ERROR_STRING(string)
mcl_error_t mcl_file_util_fflush(void *file_descriptor)
mcl_error_t mcl_file_util_fclose(void *file_descriptor)
mcl_error_t mcl_file_util_fputs(const char *data, void *file_descriptor)
void mcl_file_util_fread(void *data, mcl_size_t size, mcl_size_t count, void *file_descriptor, mcl_size_t *actual_count)
mcl_error_t mcl_file_util_fwrite_without_log(const void *data, mcl_size_t size, mcl_size_t count, void *file_descriptor)
static const char mcl_no_file_system_message[]
File utility module header file.
mcl_size_t mcl_file_util_get_file_size(void *file_descriptor)
mcl_error_t mcl_file_util_fclose_without_log(void *file_descriptor)
mcl_time_t mcl_file_util_get_time_of_last_status_change(void *file_descriptor)
void mcl_file_util_rewind(void *file_descriptor)
#define MCL_DEBUG_LEAVE(...)
mcl_error_t mcl_file_util_fwrite(const void *data, mcl_size_t size, mcl_size_t count, void *file_descriptor)