/* 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: dk4fnewc.ctr */ /** @file dk4fnewc.c The dk4fnewc module. */ #line 76 "dk4fnewc.ctr" #include "dk4conf.h" #if DK4_ON_WINDOWS #ifndef WINDOWS_H_INCLUDED #include #define WINDOWS_H_INCLUDED 1 #endif #endif #if DK4_HAVE_WCHAR_H #ifndef WCHAR_H_INCLUDED #include #define WCHAR_H_INCLUDED 1 #endif #endif #if DK4_HAVE_ASSERT_H #ifndef ASSERT_H_INCLUDED #include #define ASSERT_H_INCLUDED 1 #endif #endif #include "dk4fnewc.h" #include "dk4strw.h" #include "dk4mem.h" #include "dk4getcwdw.h" #include "dk4unused.h" #line 110 "dk4fnewc.ctr" #if DK4_ON_WINDOWS /** Constant texts used by the module. */ static const wchar_t * const dk4fne_wc_kw[] = { /* 0 */ L".", /* 1 */ L"..", NULL #line 124 "dk4fnewc.ctr" }; static int dk4fne_wc_fill_directory(dk4_dir_wc_t *ptr, const wchar_t *fn, dk4_er_t *erp) { WIN32_FIND_DATAW ffdata; wchar_t *nn; HANDLE ffres; int back = 0; #line 137 "dk4fnewc.ctr" #if DK4_USE_ASSERT assert(NULL != ptr); assert(NULL != fn); #endif ffres = FindFirstFileW(fn, &ffdata); if (INVALID_HANDLE_VALUE != ffres) { back = 1; do { if (0 != dk4strw_cmp(dk4fne_wc_kw[0], ffdata.cFileName)) { if (0 != dk4strw_cmp(dk4fne_wc_kw[1], ffdata.cFileName)) { nn = dk4strw_dup(ffdata.cFileName, erp); if (NULL != nn) { if (0 != (FILE_ATTRIBUTE_DIRECTORY & (ffdata.dwFileAttributes))) { if (0 == dk4sto_add(ptr->s_dir, (void *)nn, erp)) { back = 0; dk4mem_free(nn); } } else { if (0 == dk4sto_add(ptr->s_file, (void *)nn, erp)) { back = 0; dk4mem_free(nn); } } } else { back = 0; } } } } while (FindNextFileW(ffres, &ffdata)); FindClose(ffres); } else { #line 168 "dk4fnewc.ctr" /* ERROR: FindFirstFile failed */ dk4error_set_ldetails( erp, DK4_E_FINDFIRSTFILE_FAILED, (long)((unsigned long)GetLastError()) ); } #line 174 "dk4fnewc.ctr" return back; } #endif dk4_dir_wc_t * dk4fne_open_wc( #if DK4_ON_WINDOWS const wchar_t *fn, #else const wchar_t * DK4_ARG_UNUSED(fn), #endif dk4_er_t *erp ) { #if DK4_ON_WINDOWS dk4_dir_wc_t *back = NULL; wchar_t *p1 = NULL; int ok = 0; #line 195 "dk4fnewc.ctr" #if DK4_USE_ASSERT assert(NULL != fn); #endif if (NULL != fn) { back = dk4mem_new(dk4_dir_wc_t, 1, erp); if (NULL != back) { #line 201 "dk4fnewc.ctr" back->path = NULL; back->s_dir = NULL; back->i_dir = NULL; back->s_file = NULL; back->i_file = NULL; back->path = dk4strw_dup(fn, erp); if (NULL != back->path) { #line 208 "dk4fnewc.ctr" p1 = dk4strw_rchr(back->path, L'\\'); if (NULL != p1) { *p1 = L'\0'; } else { dk4mem_free(back->path); back->path = NULL; back->path = dk4getcwd_wc_dup(erp); } back->s_dir = dk4sto_open(erp); if (NULL != back->s_dir) { dk4sto_set_comp(back->s_dir, dk4dir_wc_compare, 0); back->i_dir = dk4sto_it_open(back->s_dir, erp); if (NULL != back->i_dir) { back->s_file = dk4sto_open(erp); if (NULL != back->s_file) { dk4sto_set_comp(back->s_file, dk4dir_wc_compare, 0); back->i_file = dk4sto_it_open(back->s_file, erp); if (NULL != back->i_file) { #line 226 "dk4fnewc.ctr" ok = dk4fne_wc_fill_directory(back, fn, erp); } else { #line 228 "dk4fnewc.ctr" } } else { #line 230 "dk4fnewc.ctr" } } else { #line 232 "dk4fnewc.ctr" } } else { #line 234 "dk4fnewc.ctr" } } else { #line 236 "dk4fnewc.ctr" } if (0 == ok) { dk4dir_wc_close(back); back = NULL; } } else { #line 242 "dk4fnewc.ctr" } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } #line 246 "dk4fnewc.ctr" return back; #else DK4_UNUSED_ARG(fn) dk4error_set_simple_error_code(erp, DK4_E_NOT_SUPPORTED); return 0; #endif }