/* Copyright (C) 2015-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk4fd.ctr */ #ifndef DK4FD_H_INCLUDED /** Avoid multiple inclusions. */ #define DK4FD_H_INCLUDED 1 #line 10 "dk4fd.ctr" /** @file File descriptors, open and close a file, read and write. Portable use of file descriptor. CRT on Windows: Required. */ #ifndef DK4CONF_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4conf.h" #else #include #endif #endif #ifndef DK4TYPES_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4types.h" #else #include #endif #endif #ifndef DK4ERROR_H_INCLUDED #if DK4_BUILDING_DKTOOLS4 #include "dk4error.h" #else #include #endif #endif #if DK4_HAVE_SYS_TYPES_H #ifndef SYS_TYPES_H_INCLUDED #include #define SYS_TYPES_H_INCLUDED 1 #endif #endif #if DK4_HAVE_SYS_STAT_H #ifndef SYS_STAT_H_INCLUDED #include #define SYS_STAT_H_INCLUDED 1 #endif #endif #if DK4_HAVE_FCNTL_H #ifndef FCNTL_H_INCLUDED #include #define FCNTL_H_INCLUDED 1 #endif #endif #if DK4_HAVE_IO_H #ifndef IO_H_INCLUDED #include #define IO_H_INCLUDED 1 #endif #endif #if DK4_HAVE_WCHAR_H #ifndef WCHAR_H_INCLUDED #include #define WCHAR_H_INCLUDED 1 #endif #endif #if DK4_ON_WINDOWS /** File open flags. */ enum { /** Read only access. */ DK4_O_RDONLY = _O_RDONLY, /** Write only access. */ DK4_O_WRONLY = _O_WRONLY, /** Read and write access. */ DK4_O_RDWR = _O_RDWR, /** Create file if it does not yet exist. */ DK4_O_CREAT = _O_CREAT, /** Combined with DK4_O_CREAT, create error if file already exists. */ DK4_O_EXCL = _O_EXCL, /** Truncate existing file. */ DK4_O_TRUNC = _O_TRUNC, /** Append to existing file. */ DK4_O_APPEND = _O_APPEND, /** Open file in binary mode. */ DK4_O_BINARY = _O_BINARY, }; #else /** File open flags. */ enum { /** Read only access. */ DK4_O_RDONLY = O_RDONLY, /** Write only access. */ DK4_O_WRONLY = O_WRONLY, /** Read and write access. */ DK4_O_RDWR = O_RDWR, /** Create file if it does not yet exist. */ DK4_O_CREAT = O_CREAT, /** Combined with DK4_O_CREAT, create error if file already exists. */ DK4_O_EXCL = O_EXCL, /** Truncate existing file. */ DK4_O_TRUNC = O_TRUNC, /** Append to existing file. */ DK4_O_APPEND = O_APPEND, /** Open file in binary mode. */ DK4_O_BINARY = 0, }; #endif #ifdef __cplusplus extern "C" { #endif /** Open a file, return file descriptor. @param path File name. @param flags Flags how to open the file. @param erp Error report, may be NULL. @return Non-negative file descriptor on success, -1 on error. Error codes: - DK4_E_INVALID_ARGUMENTS
if path is NULL, - DK4_E_OPEN_FAILED
with iDetails set to errno value if the open() function indicated an error. */ int dk4fd_c8_open(const char *path, int flags, dk4_er_t *erp); /** Open a file, return file descriptor. @param path File name. @param flags Flags how to open the file. @param erp Error report, may be NULL. @return Non-negative file descriptor on success, -1 on error. Error codes: - DK4_E_NOT_SUPPORTED
if there is no function available to open files by wchar_t file name, - DK4_E_INVALID_ARGUMENTS
if path is NULL, - DK4_E_OPEN_FAILED
with iDetails set to errno value if the open() function indicated an error. */ int dk4fd_wc_open(const wchar_t *path, int flags, dk4_er_t *erp); /** Open a file, return file descriptor. @param path File name. @param flags Flags how to open the file. @param erp Error report, may be NULL. @return Non-negative file descriptor on success, -1 on error. Error codes: - DK4_E_NOT_SUPPORTED
if there is no function available to open files by wchar_t file name, - DK4_E_INVALID_ARGUMENTS
if path is NULL, - DK4_E_OPEN_FAILED
with iDetails set to errno value if the open() function indicated an error. */ int dk4fd_open(const dkChar *path, int flags, dk4_er_t *erp); /** Close file descriptor. @param fd File descriptor to close. @param erp Error report, may be NULL. @return 1 on success, 0 on error. Error codes: - DK4_E_CLOSE_FAILED
with iDetails set to errno if the close() function indicates an error. */ int dk4fd_close(int fd, dk4_er_t *erp); /** Write data to a file descriptor. @param fd File descriptor. @param buffer Buffer start address. @param sz Size of buffer. @param erp Error report, may be NULL. @return 1 on success (all bytes written), 0 otherwise. Error codes: - DK4_E_INVALID_ARGUMENTS
if buffer is NULL or sz is 0 or sz is too large, - DK4_E_WRITE_FAILED
with mem.nelem set to the number of bytes written if the write attempt failed. */ int dk4fd_write(int fd, const void *buffer, size_t sz, dk4_er_t *erp); /** Read data from a file descriptor. @param fd File descriptor. @param buffer Buffer start address. @param psz Pointer to size variable, in: Size of buffer, out: Number of bytes read. @param erp Error report, may be NULL. @return 1 on success (at least one byte read), 0 otherwise. Error codes: - DK4_E_INVALID_ARGUMENTS
if buffer or psz is NULL or *psz is 0 or *psz is too large, - DK4_E_READ_FAILED
with iDetails set to errno if the read() function indicated an error. */ int dk4fd_read(int fd, void *buffer, size_t *psz, dk4_er_t *erp); #ifdef __cplusplus } #endif #endif