#pragma once // ensure that a given header file is included only once in a // single compilation unit #include "arena.h" #include "base.h" #include "lf_mpmc.h" #include "arena.c" // xxhash include #define XXH_INLINE_ALL #include "xxh_x86dispatch.h" // ----------------------------- Config ------------------------------------- #define FILE_HASHES_TXT "file_hashes.txt" #define HASH_STRLEN 33 // 128-bit hex (32 chars) + null #define MAX_PATHLEN 4096 #define READ_BLOCK (64 * 1024) // 64KB blocks // ----------------------------- Data types --------------------------------- // Timer typedef struct { LARGE_INTEGER start; LARGE_INTEGER end; } HiResTimer; static LARGE_INTEGER g_qpc_freq; // File entry typedef struct FileEntry { char *path; uint64_t size_bytes; uint64_t created_time; // epoch uint64_t modified_time; // epoch seconds char owner[128]; // resolved owner name } FileEntry; // Threads context typedef struct { u8 num_threads; mem_arena *path_arena; mem_arena *meta_arena; MPMCQueue *dir_queue; MPMCQueue *file_queue; } ScannerContext; typedef struct { mem_arena *arena; MPMCQueue *file_queue; } WorkerContext;