summaryrefslogtreecommitdiff
path: root/support/dktools/dk3ufi.ctr
diff options
context:
space:
mode:
Diffstat (limited to 'support/dktools/dk3ufi.ctr')
-rw-r--r--support/dktools/dk3ufi.ctr426
1 files changed, 0 insertions, 426 deletions
diff --git a/support/dktools/dk3ufi.ctr b/support/dktools/dk3ufi.ctr
deleted file mode 100644
index 9c52530af1..0000000000
--- a/support/dktools/dk3ufi.ctr
+++ /dev/null
@@ -1,426 +0,0 @@
-%% options
-
-copyright owner = Dirk Krause
-copyright year = 2012-xxxx
-SPDX-License-Identifier: BSD-3-Clause
-
-
-%% header
-
-#include "dk3types.h"
-
-/** Unique file identifier.
- If two files produce the same UFI they are both links
- to the same file or different file name notations
- pointing to the same file, i.e. "x.txt" and "./x.txt".
-*/
-typedef struct {
-#if DK3_ON_WINDOWS
- DWORD volser; /**< Volume serial number. */
- DWORD indhigh; /**< Higner index part. */
- DWORD indlow; /**< Lower index part. */
-#else
- dk3_um_t device; /**< Device number. */
- dk3_um_t inode; /**< Inode number. */
-#endif
-} dk3_ufi_t;
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** Obtain unique identifier for file.
- @param pd Result buffer pointer.
- @param fn File name to check.
- @param app Application structure for diagnostics, may be NULL.
- @return 1 on success, 0 on error.
-*/
-int
-dk3ufi_get_app(dk3_ufi_t *pd, dkChar const *fn, dk3_app_t *app);
-
-/** Obtain unique identifier for file.
- @param pd Result buffer pointer.
- @param fn File name to check (8-bit character string).
- @param app Application structure for diagnostics, may be NULL.
- @return 1 on success, 0 on error.
-*/
-int
-dk3ufi_c8_get_app(dk3_ufi_t *pd, char const *fn, dk3_app_t *app);
-
-/** Obtain unique identifier for file.
- @param pd Result buffer pointer.
- @param fn File name to check.
- @return 1 on success, 0 on error.
-*/
-int
-dk3ufi_get(dk3_ufi_t *pd, dkChar const *fn);
-
-/** Obtain unique identifier for file.
- @param pd Result buffer pointer.
- @param fn File name to check (8-bit character string).
- @return 1 on success, 0 on error.
-*/
-int
-dk3ufi_c8_get(dk3_ufi_t *pd, char const *fn);
-
-/** Compare two file identifiers.
- @param l Left identifier.
- @param r Right identifier.
- @param cr Comparison criteria (ignored).
- @return Comparison result.
-*/
-int
-dk3ufi_compare(void const *l, void const *r, int cr);
-
-#ifdef __cplusplus
-}
-#endif
-
-%% module
-
-#include "dk3all.h"
-#include "dk3ufi.h"
-#include "dk3unused.h"
-
-
-
-$!trace-include
-
-
-
-int
-dk3ufi_get_app(dk3_ufi_t *pd, dkChar const *fn, dk3_app_t *app)
-{
-#if DK3_ON_WINDOWS
- BY_HANDLE_FILE_INFORMATION bhfi;
-#endif
- dk3_stat_t stb;
-#if DK3_ON_WINDOWS
- HANDLE hFile;
- int i;
-#endif
- int back = 0;
- $? "+ dk3ufi_get_app \"%!ds\"", TR_STR(fn)
- if((pd) && (fn)) {
- if(dk3sf_stat_app(&stb, fn, app)) {
- switch(stb.ft & (~(DK3_FT_SYMLINK))) {
- case DK3_FT_REGULAR: {
-#if DK3_ON_WINDOWS
- for(i = 0; ((i < 2) && (0 == back)); i++) {
-#if DK3_CHAR_SIZE > 2
- hFile = INVALID_HANDLE_VALUE;
-#else
-#if DK3_CHAR_SIZE > 1
- $? ". wide \"%ls\"", fn
- hFile = CreateFileW(
- fn,
- ((0 == i) ? (FILE_READ_ATTRIBUTES) : 0),
- (FILE_SHARE_READ),
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL
- );
-#else
- $? ". ascii"
- hFile = CreateFileA(
- fn,
- ((0 == i) ? (FILE_READ_ATTRIBUTES) : 0),
- (FILE_SHARE_READ),
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL
- );
-#endif
-#endif
- if(INVALID_HANDLE_VALUE != hFile) {
- if(GetFileInformationByHandle(hFile, &bhfi)) {
- back = 1; $? ". success %d", i
- i = 2;
- pd->volser = bhfi.dwVolumeSerialNumber;
- pd->indhigh = bhfi.nFileIndexHigh;
- pd->indlow = bhfi.nFileIndexLow;
- } else {
- /* ERROR: Failed to obtain file information! */
- dk3app_log_i3(app, DK3_LL_ERROR, 366, 367, fn);
- }
- CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE;
- } else {
- /* ERROR: Failed to obtain file information! */
- dk3app_log_i3(app, DK3_LL_ERROR, 366, 367, fn);
- }
- }
-#else
- pd->device = stb.device;
- pd->inode = stb.inode;
- back = 1;
-#endif
- } break;
- case DK3_FT_DIRECTORY: { $? ". directory"
-#if DK3_ON_WINDOWS
- for(i = 0; ((i < 2) && (0 == back)); i++) {
-#if DK3_CHAR_SIZE > 2
- hFile = INVALID_HANDLE_VALUE;
-#else
-#if DK3_CHAR_SIZE > 1
- $? ". wide \"%ls\"", fn
- hFile = CreateFileW(
- fn,
- ((0 == i) ? (FILE_READ_ATTRIBUTES) : 0),
- (FILE_SHARE_READ),
- NULL,
- OPEN_EXISTING,
- (FILE_ATTRIBUTE_DIRECTORY | FILE_FLAG_BACKUP_SEMANTICS),
- NULL
- );
-#else
- $? ". ascii"
- hFile = CreateFileA(
- fn,
- ((0 == i) ? (FILE_READ_ATTRIBUTES) : 0),
- (FILE_SHARE_READ),
- NULL,
- OPEN_EXISTING,
- (FILE_ATTRIBUTE_DIRECTORY | FILE_FLAG_BACKUP_SEMANTICS),
- NULL
- );
-#endif
-#endif
- if(INVALID_HANDLE_VALUE != hFile) {
- if(GetFileInformationByHandle(hFile, &bhfi)) {
- back = 1; $? ". success %d", i
- i = 2;
- pd->volser = bhfi.dwVolumeSerialNumber;
- pd->indhigh = bhfi.nFileIndexHigh;
- pd->indlow = bhfi.nFileIndexLow;
- } else { $? "! GetFile... %ld", (long)GetLastError()
- /* ERROR: Failed to obtain file information! */
- dk3app_log_i3(app, DK3_LL_ERROR, 366, 367, fn);
- }
- CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE;
- } else { $? "! CreateFile %ld", (long)GetLastError()
- /* ERROR: Failed to obtain file information */
- dk3app_log_i3(app, DK3_LL_ERROR, 366, 367, fn);
- }
- }
-#else
- pd->device = stb.device;
- pd->inode = stb.inode;
- back = 1;
-#endif
- } break;
- default: { $? "! not a regular file"
- } break;
- }
- } else { $? "! stat"
- }
- } else { $? "! arguments"
- } $? "- dk3ufi_get_app %d", back
- return back;
-}
-
-
-
-int
-dk3ufi_c8_get_app(dk3_ufi_t *pd, char const *fn, dk3_app_t *app)
-{
-#if DK3_ON_WINDOWS
- BY_HANDLE_FILE_INFORMATION bhfi;
-#endif
- dk3_stat_t stb;
-#if DK3_ON_WINDOWS
- HANDLE hFile;
- int i;
-#endif
- int back = 0;
- $? "+ dk3ufi_c8_get_app %!8s", TR_8STR(fn)
- if((pd) && (fn)) {
- if(dk3sf_c8_stat_app(&stb, fn, app)) {
- switch(stb.ft & (~(DK3_FT_SYMLINK))) {
- case DK3_FT_REGULAR: {
-#if DK3_ON_WINDOWS
- for(i = 0; ((i < 2) && (0 == back)); i++) {
- $? ". ascii"
- hFile = CreateFileA(
- fn,
- ((0 == i) ? (FILE_READ_ATTRIBUTES) : 0),
- (FILE_SHARE_READ),
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL
- );
- if(INVALID_HANDLE_VALUE != hFile) {
- if(GetFileInformationByHandle(hFile, &bhfi)) {
- back = 1; $? ". success %d", i
- i = 2;
- pd->volser = bhfi.dwVolumeSerialNumber;
- pd->indhigh = bhfi.nFileIndexHigh;
- pd->indlow = bhfi.nFileIndexLow;
- } else {
- /* ERROR: Failed to obtain file information! */
-#if DK3_CHAR_SIZE == 1
- dk3app_log_i3(app, DK3_LL_ERROR, 366, 367, fn);
-#else
- dk3app_log_i1(app, DK3_LL_ERROR, 368);
-#endif
- }
- CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE;
- } else {
- /* ERROR: Failed to obtain file information! */
-#if DK3_CHAR_SIZE == 1
- dk3app_log_i3(app, DK3_LL_ERROR, 366, 367, fn);
-#else
- dk3app_log_i1(app, DK3_LL_ERROR, 368);
-#endif
- }
- }
-#else
- pd->device = stb.device;
- pd->inode = stb.inode;
- back = 1;
-#endif
- } break;
- case DK3_FT_DIRECTORY: { $? ". directory"
-#if DK3_ON_WINDOWS
- for(i = 0; ((i < 2) && (0 == back)); i++) {
- $? ". ascii"
- hFile = CreateFileA(
- fn,
- ((0 == i) ? (FILE_READ_ATTRIBUTES) : 0),
- (FILE_SHARE_READ),
- NULL,
- OPEN_EXISTING,
- (FILE_ATTRIBUTE_DIRECTORY | FILE_FLAG_BACKUP_SEMANTICS),
- NULL
- );
- if(INVALID_HANDLE_VALUE != hFile) {
- if(GetFileInformationByHandle(hFile, &bhfi)) {
- back = 1; $? ". success %d", i
- i = 2;
- pd->volser = bhfi.dwVolumeSerialNumber;
- pd->indhigh = bhfi.nFileIndexHigh;
- pd->indlow = bhfi.nFileIndexLow;
- } else { $? "! GetFile... %ld", (long)GetLastError()
- /* ERROR: Failed to obtain file information! */
-#if DK3_CHAR_SIZE == 1
- dk3app_log_i3(app, DK3_LL_ERROR, 366, 367, fn);
-#else
- dk3app_log_i1(app, DK3_LL_ERROR, 368);
-#endif
- }
- CloseHandle(hFile); hFile = INVALID_HANDLE_VALUE;
- } else { $? "! CreateFile %ld", (long)GetLastError()
- /* ERROR: Failed to obtain file information! */
-#if DK3_CHAR_SIZE == 1
- dk3app_log_i3(app, DK3_LL_ERROR, 366, 367, fn);
-#else
- dk3app_log_i1(app, DK3_LL_ERROR, 368);
-#endif
- }
- }
-#else
- pd->device = stb.device;
- pd->inode = stb.inode;
- back = 1;
-#endif
- } break;
- default: { $? "! not a regular file"
- } break;
- }
- } else { $? "! stat"
- }
- } else { $? "! arguments"
- } $? "- dk3ufi_get_app %d", back
- $? "- dk3ufi_c8_get_app %d", back
- return back;
-}
-
-
-
-int
-dk3ufi_get(dk3_ufi_t *pd, dkChar const *fn)
-{
- int back;
- back = dk3ufi_get_app(pd, fn, NULL);
- return back;
-}
-
-
-
-int
-dk3ufi_c8_get(dk3_ufi_t *pd, char const *fn)
-{
- int back;
- back = dk3ufi_c8_get_app(pd, fn, NULL);
- return back;
-}
-
-
-
-int
-dk3ufi_compare(void const *l, void const *r, int DK3_ARG_UNUSED(cr) )
-{
- int back = 0;
- dk3_ufi_t const *pl;
- dk3_ufi_t const *pr;
-
- DK3_UNUSED_ARG(cr)
- if(l) {
- if(r) {
- pl = (dk3_ufi_t const *)l; pr = (dk3_ufi_t const *)r;
-#if DK3_ON_WINDOWS
- if(pl->volser < pr->volser) {
- back = -1;
- } else {
- if(pl->volser > pr->volser) {
- back = 1;
- }
- }
- if(0 == back) {
- if(pl->indhigh < pr->indhigh) {
- back = -1;
- } else {
- if(pl->indhigh > pr->indhigh) {
- back = 1;
- }
- }
- }
- if(0 == back) {
- if(pl->indlow < pr->indlow) {
- back = -1;
- } else {
- if(pl->indlow > pr->indlow) {
- back = 1;
- }
- }
- }
-#else
- if(pl->device < pr->device) {
- back = -1;
- } else {
- if(pl->device > pr->device) {
- back = 1;
- }
- }
- if(0 == back) {
- if(pl->inode < pr->inode) {
- back = -1;
- } else {
- if(pl->inode > pr->inode) {
- back = 1;
- }
- }
- }
-#endif
- } else back = 1;
- } else {
- if(r) back = -1;
- }
- return back;
-}
-
-