summaryrefslogtreecommitdiff
path: root/support/dktools/dk4filei.ctr
diff options
context:
space:
mode:
Diffstat (limited to 'support/dktools/dk4filei.ctr')
-rw-r--r--support/dktools/dk4filei.ctr625
1 files changed, 0 insertions, 625 deletions
diff --git a/support/dktools/dk4filei.ctr b/support/dktools/dk4filei.ctr
deleted file mode 100644
index f674447add..0000000000
--- a/support/dktools/dk4filei.ctr
+++ /dev/null
@@ -1,625 +0,0 @@
-%% options
-
-copyright owner = Dirk Krause
-copyright year = 2015-xxxx
-SPDX-License-Identifier: BSD-3-Clause
-
-
-%% header
-
-/** @file
- Functions for file information.
-*/
-
-#ifndef DK4CONF_H_INCLUDED
-#if DK4_BUILDING_DKTOOLS4
-#include "dk4conf.h"
-#else
-#include <dktools-4/dk4conf.h>
-#endif
-#endif
-
-#ifndef DK4FILEIT_H_INCLUDED
-#if DK4_BUILDING_DKTOOLS4
-#include "dk4fileit.h"
-#else
-#include <dktools-4/dk4fileit.h>
-#endif
-#endif
-
-#ifndef DK4UFI_H_INCLUDED
-#if DK4_BUILDING_DKTOOLS4
-#include "dk4ufi.h"
-#else
-#include <dktools-4/dk4ufi.h>
-#endif
-#endif
-
-#ifndef DK4ERROR_H_INCLUDED
-#if DK4_BUILDING_DKTOOLS4
-#include "dk4error.h"
-#else
-#include <dktools-4/dk4error.h>
-#endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Initialize a file information structure.
- @param dptr File information structure to initialize.
-*/
-void
-dk4fileinfo_init(dk4_file_info_t *dptr);
-
-/** Retrieve full information for a path name.
- For symbolic links attempt to retrieve information both
- about the link and about the link target.
-
- CRT on Windows: Not used.
- @param dptr Pointer to result structure.
- @param fn File path name.
- @param erp Error report, may be NULL.
- @return 1 if information is found, 0 otherwise.
- If information about the link is found and no information about
- the target, the function returns 1 as we can recognize the
- directory item as a dangling link (link with non-existing target).
-
- Error codes:
- - DK4_E_INVALID_ARGUMENTS<br>
- if dptr or fn is NULL,
- - DK4_E_SYSTEM<br>
- with errno value stored in iDetails1 if the stat() function
- fails on non-Windows systems.
- - DK4_E_SYSTEM<br>
- with GetLastError() value stored in lDetails1 if the
- GetFileAttributes() function failed,
- - DK4_E_CREATE_FILE_FAILED<br>
- with GetLastError() value stored in lDetails1 if the
- CreateFile() function failed on Windows systems,
- - DK4_E_FILE_INFORMATION_FAILED<br>
- with GetLastError() value stored in lDetails1 if the
- GetFileInformationByHandle() function failed on Windows systems,
- - DK4_E_FINDFIRSTFILE_FAILED<br>
- with GetLastError() value stored in lDetails1 if the
- FindFirstFile() function failed on Windows systems.
-*/
-int
-dk4fileinfo_c8(dk4_file_info_t *dptr, const char *fn, dk4_er_t *erp);
-
-/** Retrieve full information for a path name.
- For symbolic links attempt to retrieve information both
- about the link and about the link target.
-
- CRT on Windows: Not used.
- @param dptr Pointer to result structure.
- @param fn File path name.
- @param erp Error report, may be NULL.
- @return 1 if information is found, 0 otherwise.
- If information about the link is found and no information about
- the target, the function returns 1 as we can recognize the
- directory item as a dangling link (link with non-existing target).
-
- Error codes:
- - DK4_E_INVALID_ARGUMENTS<br>
- if dptr or fn is NULL,
- - DK4_E_SYSTEM<br>
- with errno value stored in iDetails1 if the stat() function
- fails on non-Windows systems.
- - DK4_E_SYSTEM<br>
- with GetLastError() value stored in lDetails1 if the
- GetFileAttributes() function failed,
- - DK4_E_CREATE_FILE_FAILED<br>
- with GetLastError() value stored in lDetails1 if the
- CreateFile() function failed on Windows systems,
- - DK4_E_FILE_INFORMATION_FAILED<br>
- with GetLastError() value stored in lDetails1 if the
- GetFileInformationByHandle() function failed on Windows systems,
- - DK4_E_FINDFIRSTFILE_FAILED<br>
- with GetLastError() value stored in lDetails1 if the
- FindFirstFile() function failed on Windows systems.
-*/
-int
-dk4fileinfo_wc(dk4_file_info_t *dptr, const wchar_t *fn, dk4_er_t *erp);
-
-/** Retrieve full information for a path name.
- For symbolic links attempt to retrieve information both
- about the link and about the link target.
-
- CRT on Windows: Not used.
- @param dptr Pointer to result structure.
- @param fn File path name.
- @param erp Error report, may be NULL.
- @return 1 if information is found, 0 otherwise.
- If information about the link is found and no information about
- the target, the function returns 1 as we can recognize the
- directory item as a dangling link (link with non-existing target).
-
- Error codes:
- - DK4_E_INVALID_ARGUMENTS<br>
- if dptr or fn is NULL,
- - DK4_E_SYSTEM<br>
- with errno value stored in iDetails1 if the stat() function
- fails on non-Windows systems.
- - DK4_E_SYSTEM<br>
- with GetLastError() value stored in lDetails1 if the
- GetFileAttributes() function failed,
- - DK4_E_CREATE_FILE_FAILED<br>
- with GetLastError() value stored in lDetails1 if the
- CreateFile() function failed on Windows systems,
- - DK4_E_FILE_INFORMATION_FAILED<br>
- with GetLastError() value stored in lDetails1 if the
- GetFileInformationByHandle() function failed on Windows systems,
- - DK4_E_FINDFIRSTFILE_FAILED<br>
- with GetLastError() value stored in lDetails1 if the
- FindFirstFile() function failed on Windows systems.
-*/
-int
-dk4fileinfo(dk4_file_info_t *dptr, const dkChar *fn, dk4_er_t *erp);
-
-/** Retrieve timestamp from file information structure.
- @param dptr Destination buffer pointer.
- @param szdptr Destination buffer size.
- @param fi File information structure.
- @param chfile For symolic links, choose information source:
- DK4_FILE_INFO_CONTENTS_DATA_LINK for the link
- itself,
- DK4_FILE_INFO_CONTENTS_DATA_TARGET for the link target.
- @param chtime Choose timestamp:
- DK4_FILE_INFO_TIME_CREATE for creation time,
- DK4_FILE_INFO_TIME_MODIFY for modification time,
- DK4_FILE_INFO_TIME_ACCESS for last access time.
- @param erp Error report, may be NULL.
- @return 1 on success, 0 on error.
-
- Error codes:
- - DK4_E_INVALID_ARGUMENTS<br>
- if dptr or fi is NULL or szdptr is 0,
- - DK4_E_NOT_FOUND<br>
- if the required information is not found in the file information
- structure.
-*/
-int
-dk4fileinfo_timestamp_c8(
- char *dptr,
- size_t szdptr,
- const dk4_file_info_t *fi,
- int chfile,
- int chtime,
- dk4_er_t *erp
-);
-
-/** Retrieve timestamp from file information structure.
- @param dptr Destination buffer pointer.
- @param szdptr Destination buffer size (number of wchar_t).
- @param fi File information structure.
- @param chfile For symolic links, choose information source:
- DK4_FILE_INFO_CONTENTS_DATA_LINK for the link
- itself,
- DK4_FILE_INFO_CONTENTS_DATA_TARGET for the link target.
- @param chtime Choose timestamp:
- DK4_FILE_INFO_TIME_CREATE for creation time,
- DK4_FILE_INFO_TIME_MODIFY for modification time,
- DK4_FILE_INFO_TIME_ACCESS for last access time.
- @param erp Error report, may be NULL.
- @return 1 on success, 0 on error.
-
- Error codes:
- - DK4_E_INVALID_ARGUMENTS<br>
- if dptr or fi is NULL or szdptr is 0,
- - DK4_E_NOT_FOUND<br>
- if the required information is not found in the file information
- structure.
-*/
-int
-dk4fileinfo_timestamp_wc(
- wchar_t *dptr,
- size_t szdptr,
- const dk4_file_info_t *fi,
- int chfile,
- int chtime,
- dk4_er_t *erp
-);
-
-/** Retrieve timestamp from file information structure.
- @param dptr Destination buffer pointer.
- @param szdptr Destination buffer size (number of dkChar).
- @param fi File information structure.
- @param chfile For symolic links, choose information source:
- DK4_FILE_INFO_CONTENTS_DATA_LINK for the link
- itself,
- DK4_FILE_INFO_CONTENTS_DATA_TARGET for the link target.
- @param chtime Choose timestamp:
- DK4_FILE_INFO_TIME_CREATE for creation time,
- DK4_FILE_INFO_TIME_MODIFY for modification time,
- DK4_FILE_INFO_TIME_ACCESS for last access time.
- @param erp Error report, may be NULL.
- @return 1 on success, 0 on error.
-
- Error codes:
- - DK4_E_INVALID_ARGUMENTS<br>
- if dptr or fi is NULL or szdptr is 0,
- - DK4_E_NOT_FOUND<br>
- if the required information is not found in the file information
- structure.
-*/
-int
-dk4fileinfo_timestamp(
- dkChar *dptr,
- size_t szdptr,
- const dk4_file_info_t *fi,
- int chfile,
- int chtime,
- dk4_er_t *erp
-);
-
-/** Retrieve file type and attributes (file attributes on Windows,
- permissions on other systems).
- @param dptr Destination buffer address.
- @param szdptr Destination buffer size.
- @param fi File information structure.
- @param erp Error report, may be NULL.
- @return 1 on success, 0 on error.
-
- Error codes:
- - DK4_E_INVALID_ARGUMENTS<br>
- if dptr or fi is NULL or szdptr is 0,
- - DK4_E_NOT_FOUND<br>
- if the required information is not available in the file information.
-*/
-int
-dk4fileinfo_type_attributes_c8(
- char *dptr,
- size_t szdptr,
- dk4_file_info_t const *fi,
- dk4_er_t *erp
-);
-
-/** Retrieve file type and attributes (file attributes on Windows,
- permissions on other systems).
- @param dptr Destination buffer address.
- @param szdptr Destination buffer size (number of wchar_t).
- @param fi File information structure.
- @param erp Error report, may be NULL.
- @return 1 on success, 0 on error.
-
- Error codes:
- - DK4_E_INVALID_ARGUMENTS<br>
- if dptr or fi is NULL or szdptr is 0,
- - DK4_E_NOT_FOUND<br>
- if the required information is not available in the file information.
-*/
-int
-dk4fileinfo_type_attributes_wc(
- wchar_t *dptr,
- size_t szdptr,
- dk4_file_info_t const *fi,
- dk4_er_t *erp
-);
-
-/** Retrieve file type and attributes (file attributes on Windows,
- permissions on other systems).
- @param dptr Destination buffer address.
- @param szdptr Destination buffer size (number of dkChar).
- @param fi File information structure.
- @param erp Error report, may be NULL.
- @return 1 on success, 0 on error.
-
- Error codes:
- - DK4_E_INVALID_ARGUMENTS<br>
- if dptr or fi is NULL or szdptr is 0,
- - DK4_E_NOT_FOUND<br>
- if the required information is not available in the file information.
-*/
-int
-dk4fileinfo_type_attributes(
- dkChar *dptr,
- size_t szdptr,
- dk4_file_info_t const *fi,
- dk4_er_t *erp
-);
-
-/** Retrieve unique file identifier from file information structure.
- @param dptr Pointer to destination variable.
- @param src File information structure to retrieve information from.
- @param ch For symbolic links choose between information
- for link itself (DK4_FILE_INFO_CONTENTS_DATA_LINK)
- or link target (DK4_FILE_INFO_CONTENTS_DATA_TARGET).
- @param erp Error report, may be NULL.
- @return 1 on success, 0 on error.
-
- Error codes:
- - DK4_E_INVALID_ARGUMENTS<br>
- if dptr or src is NULL,
- - DK4_E_NOT_FOUND<br>
- if the information is not present in the file information structure.
-*/
-int
-dk4fileinfo_ufi(
- dk4_ufi_t *dptr, const dk4_file_info_t *src, int ch, dk4_er_t *erp
-);
-
-/** Check whether the file information structure represents a
- symbolic link.
- @param dptr File information structure to check.
- @return 1 for symbolic links, 0 otherwise.
-*/
-int
-dk4fileinfo_is_symlink(const dk4_file_info_t *dptr);
-
-/** Retrieve file size.
- @param dptr Pointer to result variable.
- @param fi File information structure.
- @param ch Choose information source for symbolic links:
- DK4_FILE_INFO_CONTENTS_DATA_LINK for the size
- of the link itself,
- DK4_FILE_INFO_CONTENTS_DATA_TARGET for the size
- of the link target.
- @param erp Error report, may be NULL.
- @return 1 on success, 0 on error.
-
- Error codes:
- - DK4_E_INVALID_ARGUMENTS<br>
- if dptr or fi is NULL,
- - DK4_E_NOT_FOUND<br>
- if the required information is not available in the file
- information structure,
- - DK4_E_MATH_OVERFLOW<br>
- if the size calculation results in a numeric overflow.
-*/
-int
-dk4fileinfo_size(
- dk4_um_t *dptr,
- const dk4_file_info_t *fi,
- int ch,
- dk4_er_t *erp
-);
-
-/** Check whether the file exists and is a regular file.
- For a symbolic link, the target must exist and be a regular file.
- @param fi File information already obtained for the file.
- @param erp Error report, may be NULL.
- @return 1 if the file exists and is a regular file.
-
- Error codes:
- - DK4_E_INVALID_ARGUMENTS<br>
- if fi is NULL.
-*/
-int
-dk4fileinfo_exists_and_is_regular(const dk4_file_info_t *fi, dk4_er_t *erp);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
-%% module
-
-#include "dk4conf.h"
-#include "dk4filei.h"
-
-#ifndef DK4MEM_H_INCLUDED
-#include "dk4mem.h"
-#endif
-
-#ifndef DK4MAADU_H_INCLUDED
-#include "dk4maadu.h"
-#endif
-
-
-#include "dk4unused.h"
-
-#if DK4_HAVE_ASSERT_H
-#ifndef ASSERT_H_INCLUDED
-#include <assert.h>
-#define ASSERT_H_INCLUDED 1
-#endif
-#endif
-
-
-
-$!trace-include
-
-
-
-void
-dk4fileinfo_init(dk4_file_info_t *dptr)
-{
-#if DK4_USE_ASSERT
- assert(NULL != dptr);
-#endif
- if (NULL != dptr) {
- DK4_MEMRES(dptr, sizeof(dk4_file_info_t));
- dptr->contents = 0;
- }
-}
-
-
-
-int
-dk4fileinfo_is_symlink(const dk4_file_info_t *dptr)
-{
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != dptr);
-#endif
- if (NULL != dptr) {
- if (0 != (DK4_FILE_INFO_CONTENTS_DATA_LINK & (dptr->contents))) {
-#if DK4_ON_WINDOWS
- if (0 != (FILE_ATTRIBUTE_REPARSE_POINT & (dptr->fattr))) {
- if (IO_REPARSE_TAG_MOUNT_POINT == dptr->rppnt) {
- back = 1;
- }
- if (IO_REPARSE_TAG_SYMLINK == dptr->rppnt) {
- back = 1;
- }
- }
-#else
-#if defined(S_IFMT) && defined (S_IFLNK)
- if (S_IFLNK == (S_IFMT & ((dptr->lstb).st_mode))) {
- back = 1;
- }
-#endif
-#endif
- }
- }
- return back;
-}
-
-
-
-#if DK4_ON_WINDOWS
-static
-int
-dk4fileinfo_copy_size(
- dk4_um_t *dptr,
- const BY_HANDLE_FILE_INFORMATION *bhfi,
- dk4_er_t *erp
-)
-{
- dk4_er_t er;
- dk4_um_t val;
- int back = 0;
- $? "+ dk4fileinfo_copy_size"
-#if DK4_USE_ASSERT
- assert(NULL != dptr);
- assert(NULL != bhfi);
-#endif
- dk4error_init(&er);
- $? ". high %lu", (0xFFFFFFFFUL & ((unsigned long)(bhfi->nFileSizeHigh)))
- $? ". low %lu", (0xFFFFFFFFUL & ((unsigned long)(bhfi->nFileSizeLow)))
- if ((DWORD)0UL != bhfi->nFileSizeHigh) {
- val = dk4ma_um_add(
- dk4ma_um_mul(
- dk4ma_um_add(
- (dk4_um_t)0xFFFFFFFFUL,
- (dk4_um_t)1UL,
- &er
- ),
- (dk4_um_t)(bhfi->nFileSizeHigh),
- &er
- ),
- (dk4_um_t)(bhfi->nFileSizeLow),
- &er
- );
- } else {
- val = (dk4_um_t)(bhfi->nFileSizeLow);
- }
- if (DK4_E_NONE == er.ec) { $? ". no overflow"
- back = 1;
- *dptr = val;
- } else { $? "! overflow"
- dk4error_copy(erp, &er);
- }
- $? "- dk4fileinfo_copy_size %d", back
- return back;
-}
-#else
-static
-int
-dk4fileinfo_copy_size(
- dk4_um_t *dptr,
- const dk4_stat_t *stb,
- dk4_er_t * DK4_ARG_UNUSED(erp)
-)
-{
- DK4_UNUSED_ARG(erp)
-#if DK4_USE_ASSERT
- assert(NULL != dptr);
- assert(NULL != stb);
-#endif
- *dptr = (dk4_um_t)(stb->st_size);
- return 1;
-}
-#endif
-
-
-int
-dk4fileinfo_size(
- dk4_um_t *dptr,
- const dk4_file_info_t *fi,
- int ch,
- dk4_er_t *erp
-)
-{
- dk4_er_t er;
- int back = 0;
- $? "+ dk4fileinfo_size"
-#if DK4_USE_ASSERT
- assert(NULL != dptr);
- assert(NULL != fi);
-#endif
- if ((NULL != dptr) && (NULL != fi)) { $? ". args ok"
- dk4error_init(&er);
- switch (ch) {
- case DK4_FILE_INFO_CONTENTS_DATA_LINK: {
- $? ". link"
- if (0 != ((fi->contents) & DK4_FILE_INFO_CONTENTS_DATA_LINK)) {
-#if DK4_ON_WINDOWS
- $? ". windows"
- back = dk4fileinfo_copy_size(dptr, &(fi->linfo), &er);
-#else
- $? ". non-Windows"
- back = dk4fileinfo_copy_size(dptr, &(fi->lstb), &er);
-#endif
- } else { $? "! no data stored"
- dk4error_set_simple_error_code(erp, DK4_E_NOT_FOUND);
- }
- } break;
- default: {
- $? ". link target"
- if (0 != ((fi->contents) & DK4_FILE_INFO_CONTENTS_DATA_TARGET)) {
-#if DK4_ON_WINDOWS
- $? ". Windows"
- back = dk4fileinfo_copy_size(dptr, &(fi->tinfo), &er);
-#else
- $? ". non-Windows"
- back = dk4fileinfo_copy_size(dptr, &(fi->tstb), &er);
-#endif
- } else { $? "! no data stored"
- dk4error_set_simple_error_code(erp, DK4_E_NOT_FOUND);
- }
- } break;
- }
- if (0 != back) {
- dk4error_copy(erp, &er);
- }
- } else {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- } $? "- dk4fileinfo_size %d", back
- return back;
-}
-
-
-
-int
-dk4fileinfo_exists_and_is_regular(const dk4_file_info_t *fi, dk4_er_t *erp)
-{
- int back = 0;
-#if DK4_USE_ASSERT
- assert(NULL != fi);
-#endif
- if (NULL != fi) {
-#if DK4_ON_WINDOWS
- if (0 != (DK4_FILE_INFO_CONTENTS_DATA_LINK & (fi->contents))) {
- if ((DWORD)0UL == (FILE_ATTRIBUTE_DIRECTORY & fi->fattr)) {
- if ((DWORD)0UL == (FILE_ATTRIBUTE_DEVICE & fi->fattr)) {
- back = 1;
- }
- }
- }
-#else
- if (0 != (DK4_FILE_INFO_CONTENTS_DATA_TARGET & (fi->contents))) {
- if (S_IFREG == (S_IFMT & ((fi->tstb).st_mode))) {
- back = 1;
- }
- }
-#endif
- } else {
- dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS);
- }
- return back;
-}
-