master
c 72 lines 2.26 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "libnetdata/libnetdata.h"
4 #include <errno.h>
5
6 //#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_MACOS)
7 #include <sys/stat.h>
8
9 OS_FILE_METADATA os_get_file_metadata(const char *path) {
10 OS_FILE_METADATA metadata = {0};
11 struct stat st;
12
13 if (stat(path, &st) != 0)
14 return metadata;
15
16 metadata.size_bytes = st.st_size;
17 metadata.modified_time = st.st_mtime;
18 return metadata;
19 }
20 //#endif
21
22 //#if defined(OS_WINDOWS)
23 //#include <windows.h>
24 //
25 //OS_FILE_METADATA os_get_file_metadata(const char *path) {
26 // OS_FILE_METADATA metadata = {0};
27 //
28 // // Convert UTF-8 path to wide-character string
29 // int wlen = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, -1, NULL, 0);
30 // if (wlen == 0)
31 // return metadata;
32 //
33 // wchar_t *wpath = (wchar_t *)mallocz(wlen * sizeof(wchar_t));
34 // if (!wpath)
35 // return metadata;
36 //
37 // if (MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, -1, wpath, wlen) == 0) {
38 // freez(wpath);
39 // return metadata;
40 // }
41 //
42 // WIN32_FILE_ATTRIBUTE_DATA attr_data;
43 // if (!GetFileAttributesExW(wpath, GetFileExInfoStandard, &attr_data)) {
44 // freez(wpath);
45 // return metadata;
46 // }
47 //
48 // freez(wpath);
49 //
50 // // Combine high and low parts for 64-bit file size
51 // ULARGE_INTEGER file_size;
52 // file_size.HighPart = attr_data.nFileSizeHigh;
53 // file_size.LowPart = attr_data.nFileSizeLow;
54 // metadata.size_bytes = file_size.QuadPart;
55 //
56 // // Convert Windows FILETIME to Unix timestamp
57 // // Windows FILETIME is in 100-nanosecond intervals since January 1, 1601 UTC
58 // // Need to convert to seconds since January 1, 1970 UTC
59 // ULARGE_INTEGER win_time;
60 // win_time.HighPart = attr_data.ftLastWriteTime.dwHighDateTime;
61 // win_time.LowPart = attr_data.ftLastWriteTime.dwLowDateTime;
62 //
63 // // Subtract Windows epoch start (January 1, 1601 UTC)
64 // // Add Unix epoch start (January 1, 1970 UTC)
65 // // Convert from 100-nanosecond intervals to seconds
66 // const uint64_t WINDOWS_TICK = 10000000;
67 // const uint64_t SEC_TO_UNIX_EPOCH = 11644473600LL;
68 // metadata.modified_time = (time_t)((win_time.QuadPart / WINDOWS_TICK) - SEC_TO_UNIX_EPOCH);
69 //
70 // return metadata;
71 //}
72 //#endif