QSC Post Quantum Cryptographic Library 1.0.0.6c (A6)
A post quantum secure library written in Ansi C
 
Loading...
Searching...
No Matches
fileutils.h
Go to the documentation of this file.
1/*
2 * 2025 Quantum Resistant Cryptographic Solutions Corporation
3 * All Rights Reserved.
4 *
5 * NOTICE: This software and all accompanying materials are the exclusive
6 * property of Quantum Resistant Cryptographic Solutions Corporation (QRCS).
7 * The intellectual and technical concepts contained within this implementation
8 * are proprietary to QRCS and its authorized licensors and are protected under
9 * applicable U.S. and international copyright, patent, and trade secret laws.
10 *
11 * CRYPTOGRAPHIC STANDARDS:
12 * - This software includes implementations of cryptographic algorithms such as
13 * SHA3, AES, and others. These algorithms are public domain or standardized
14 * by organizations such as NIST and are NOT the property of QRCS.
15 * - However, all source code, optimizations, and implementations in this library
16 * are original works of QRCS and are protected under this license.
17 *
18 * RESTRICTIONS:
19 * - Redistribution, modification, or unauthorized distribution of this software,
20 * in whole or in part, is strictly prohibited.
21 * - This software is provided for non-commercial, educational, and research
22 * purposes only. Commercial use in any form is expressly forbidden.
23 * - Licensing and authorized distribution are solely at the discretion of QRCS.
24 * - Any use of this software implies acceptance of these restrictions.
25 *
26 * DISCLAIMER:
27 * This software is provided "as is," without warranty of any kind, express or
28 * implied, including but not limited to warranties of merchantability or fitness
29 * for a particular purpose. QRCS disclaims all liability for any direct, indirect,
30 * incidental, or consequential damages resulting from the use or misuse of this software.
31 *
32 * FULL LICENSE:
33 * This software is subject to the **Quantum Resistant Cryptographic Solutions
34 * Proprietary License (QRCS-PL)**. The complete license terms are included
35 * in the LICENSE.txt file distributed with this software.
36 *
37 * Written by: John G. Underhill
38 * Contact: john.underhill@protonmail.com
39 */
40
41#ifndef QSC_FILEUTILS_H
42#define QSC_FILEUTILS_H
43
44#include "common.h"
45#include <stdio.h>
46
47QSC_CPLUSPLUS_ENABLED_START
48
71
76#define QSC_FILEUTILS_CHUNK_SIZE 4096ULL
77
82#define QSC_FILEUTILS_MAX_EXTENSION 16ULL
83
88#define QSC_FILEUTILS_MAX_FILENAME QSC_SYSTEM_MAX_PATH
89
94#define QSC_FILEUTILS_MAX_PATH QSC_SYSTEM_MAX_PATH
95
96#if defined(QSC_SYSTEM_OS_WINDOWS)
100 static const char QSC_FILEUTILS_DIRECTORY_SEPERATOR[] = "\\";
101#else
105 static const char QSC_FILEUTILS_DIRECTORY_SEPERATOR[] = "/";
106#endif
107
112typedef enum
113{
115#if defined(QSC_SYSTEM_OS_WINDOWS)
119#else
123#endif
125
140
151QSC_EXPORT_API bool qsc_fileutils_append_to_file(const char* fpath, const char* stream, size_t length);
152
161QSC_EXPORT_API size_t qsc_fileutils_copy_file_to_object(const char* fpath, void* obj, size_t length);
162
171QSC_EXPORT_API size_t qsc_fileutils_copy_file_to_stream(const char* fpath, char* stream, size_t length);
172
181QSC_EXPORT_API bool qsc_fileutils_copy_object_to_file(const char* fpath, const void* obj, size_t length);
182
191QSC_EXPORT_API bool qsc_fileutils_copy_stream_to_file(const char* fpath, const char* stream, size_t length);
192
199QSC_EXPORT_API bool qsc_fileutils_create(const char* fpath);
200
207QSC_EXPORT_API bool qsc_fileutils_delete(const char* fpath);
208
215QSC_EXPORT_API bool qsc_fileutils_erase(const char* fpath);
216
224QSC_EXPORT_API bool qsc_fileutils_file_copy(const char* inpath, const char* outpath);
225
234
243QSC_EXPORT_API size_t qsc_fileutils_get_directory(char* directory, size_t dirlen, const char* fpath);
244
253QSC_EXPORT_API size_t qsc_fileutils_get_extension(char* extension, size_t extlen, const char* fpath);
254
263QSC_EXPORT_API size_t qsc_fileutils_get_name(char* name, size_t namelen, const char* fpath);
264
275QSC_EXPORT_API int64_t qsc_fileutils_get_line(char** line, size_t* length, FILE* fp);
276
283QSC_EXPORT_API size_t qsc_fileutils_get_size(const char* fpath);
284
292
301QSC_EXPORT_API size_t qsc_fileutils_list_files(char* result, size_t reslen, const char* directory);
302
309
316QSC_EXPORT_API bool qsc_fileutils_exists(const char* fpath);
317
326QSC_EXPORT_API FILE* qsc_fileutils_open(const char* fpath, qsc_fileutils_mode mode, bool binary);
327
337QSC_EXPORT_API size_t qsc_fileutils_read(char* output, size_t otplen, size_t position, FILE* fp);
338
348QSC_EXPORT_API size_t qsc_fileutils_safe_read(const char* fpath, size_t position, char* output, size_t length);
349
359QSC_EXPORT_API size_t qsc_fileutils_safe_write(const char* fpath, size_t position, const char* input, size_t length);
360
368QSC_EXPORT_API bool qsc_fileutils_seekto(FILE* fp, size_t position);
369
379QSC_EXPORT_API int64_t qsc_fileutils_read_line(const char* fpath, char* buffer, size_t buflen, size_t linenum);
380
388QSC_EXPORT_API bool qsc_fileutils_truncate_file(FILE* fp, size_t length);
389
396QSC_EXPORT_API bool qsc_fileutils_valid_path(const char* fpath);
397
407QSC_EXPORT_API size_t qsc_fileutils_write(const char* input, size_t inplen, size_t position, FILE* fp);
408
417QSC_EXPORT_API bool qsc_fileutils_write_line(const char* fpath, const char* input, size_t inplen);
418
424QSC_EXPORT_API void qsc_fileutils_zeroise(const char* fpath);
425
431#if defined(QSC_DEBUG_MODE)
432QSC_EXPORT_API void qsc_fileutils_test(const char* fpath);
433#endif
434
435QSC_CPLUSPLUS_ENABLED_END
436
437#endif
Contains common definitions for the Quantum Secure Cryptographic (QSC) library.
#define QSC_EXPORT_API
API export macro for Microsoft compilers when importing from a DLL.
Definition common.h:520
QSC_EXPORT_API bool qsc_fileutils_write_line(const char *fpath, const char *input, size_t inplen)
Append a line of text to the end of a file.
Definition fileutils.c:1160
QSC_EXPORT_API size_t qsc_fileutils_get_extension(char *extension, size_t extlen, const char *fpath)
Get the file extension.
Definition fileutils.c:459
QSC_EXPORT_API size_t qsc_fileutils_write(const char *input, size_t inplen, size_t position, FILE *fp)
Write data to a file.
Definition fileutils.c:1138
qsc_fileutils_access_rights
Enumerates the file access rights.
Definition fileutils.h:113
@ qsc_fileutils_access_write
Definition fileutils.h:121
@ qsc_fileutils_access_read
Definition fileutils.h:120
@ qsc_fileutils_access_exists
Definition fileutils.h:114
@ qsc_fileutils_access_execute
Definition fileutils.h:122
QSC_EXPORT_API size_t qsc_fileutils_safe_write(const char *fpath, size_t position, const char *input, size_t length)
Write data to a binary file.
Definition fileutils.c:1020
QSC_EXPORT_API FILE * qsc_fileutils_open(const char *fpath, qsc_fileutils_mode mode, bool binary)
Open a file and return the handle.
Definition fileutils.c:836
QSC_EXPORT_API bool qsc_fileutils_exists(const char *fpath)
Test to see if a file exists.
Definition fileutils.c:349
QSC_EXPORT_API size_t qsc_fileutils_get_name(char *name, size_t namelen, const char *fpath)
Get the file name.
Definition fileutils.c:492
QSC_EXPORT_API bool qsc_fileutils_create(const char *fpath)
Create a new file.
Definition fileutils.c:262
QSC_EXPORT_API size_t qsc_fileutils_copy_file_to_stream(const char *fpath, char *stream, size_t length)
Copy elements from a file to a byte array.
Definition fileutils.c:169
QSC_EXPORT_API int64_t qsc_fileutils_read_line(const char *fpath, char *buffer, size_t buflen, size_t linenum)
Read a line of text from a file.
Definition fileutils.c:911
QSC_EXPORT_API bool qsc_fileutils_get_working_directory(char *fpath)
Get the working directory fpath.
Definition fileutils.c:647
QSC_EXPORT_API size_t qsc_fileutils_safe_read(const char *fpath, size_t position, char *output, size_t length)
Read data from a binary file.
Definition fileutils.c:990
QSC_EXPORT_API bool qsc_fileutils_copy_object_to_file(const char *fpath, const void *obj, size_t length)
Copy an object to a file.
Definition fileutils.c:200
QSC_EXPORT_API size_t qsc_fileutils_get_size(const char *fpath)
Get the file size in bytes.
Definition fileutils.c:612
QSC_EXPORT_API bool qsc_fileutils_erase(const char *fpath)
Erase a file's contents.
Definition fileutils.c:307
QSC_EXPORT_API void qsc_fileutils_zeroise(const char *fpath)
Truncate a file to zero bytes.
Definition fileutils.c:1200
QSC_EXPORT_API int64_t qsc_fileutils_get_line(char **line, size_t *length, FILE *fp)
Reads a line of text from a formatted file.
Definition fileutils.c:531
QSC_EXPORT_API bool qsc_fileutils_get_access(const char *fpath, qsc_fileutils_access_rights level)
Test a user's access right to a file.
Definition fileutils.c:410
QSC_EXPORT_API bool qsc_fileutils_truncate_file(FILE *fp, size_t length)
Truncate a file to a specified byte size.
Definition fileutils.c:1071
QSC_EXPORT_API size_t qsc_fileutils_get_directory(char *directory, size_t dirlen, const char *fpath)
Get the file directory.
Definition fileutils.c:429
QSC_EXPORT_API void qsc_fileutils_close(FILE *fp)
Close a file.
Definition fileutils.c:127
QSC_EXPORT_API bool qsc_fileutils_append_to_file(const char *fpath, const char *stream, size_t length)
Append an array of characters to a file.
Definition fileutils.c:95
qsc_fileutils_mode
Enumerates the file open modes.
Definition fileutils.h:131
@ qsc_fileutils_mode_append_update
Definition fileutils.h:138
@ qsc_fileutils_mode_write
Definition fileutils.h:135
@ qsc_fileutils_mode_append
Definition fileutils.h:137
@ qsc_fileutils_mode_read
Definition fileutils.h:133
@ qsc_fileutils_mode_write_update
Definition fileutils.h:136
@ qsc_fileutils_mode_none
Definition fileutils.h:132
@ qsc_fileutils_mode_read_update
Definition fileutils.h:134
QSC_EXPORT_API size_t qsc_fileutils_list_files(char *result, size_t reslen, const char *directory)
Get the filenames in a directory delineated with a newline.
Definition fileutils.c:686
QSC_EXPORT_API bool qsc_fileutils_seekto(FILE *fp, size_t position)
Set the file pointer position.
Definition fileutils.c:1051
QSC_EXPORT_API bool qsc_fileutils_copy_stream_to_file(const char *fpath, const char *stream, size_t length)
Copy the contents of a stream to a file.
Definition fileutils.c:231
QSC_EXPORT_API bool qsc_fileutils_delete(const char *fpath)
Delete a file.
Definition fileutils.c:291
QSC_EXPORT_API size_t qsc_fileutils_copy_file_to_object(const char *fpath, void *obj, size_t length)
Copy a file to an object.
Definition fileutils.c:138
QSC_EXPORT_API size_t qsc_fileutils_read(char *output, size_t otplen, size_t position, FILE *fp)
Read data from a file into an output stream.
Definition fileutils.c:890
QSC_EXPORT_API bool qsc_fileutils_valid_path(const char *fpath)
Checks if the fpath is valid.
Definition fileutils.c:1109
QSC_EXPORT_API bool qsc_fileutils_file_copy(const char *inpath, const char *outpath)
Copy a file to a new location.
Definition fileutils.c:374