Skip to content

Commit f14db65

Browse files
committed
refactor: align Windows compat with original libhv patterns
- Revert _read/_close to plain read/close (POSIX compat via <io.h>) - Keep is_modified() using ::stat() (only called on non-Windows path) - Consistent with original FileCache.cpp Windows handling patterns
1 parent bc30edc commit f14db65

1 file changed

Lines changed: 10 additions & 12 deletions

File tree

http/server/FileCacheEx.h

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,11 @@
2121
#include <string>
2222
#include <mutex>
2323

24+
#include "hexport.h"
2425
#include "hbuf.h"
2526
#include "hstring.h"
2627
#include "LRUCache.h"
2728

28-
// Forward declare to avoid header pollution
29-
struct file_cache_ex_s;
30-
3129
// Default values — may be overridden at runtime via FileCacheEx setters
3230
#define FILECACHE_EX_DEFAULT_HEADER_LENGTH 4096 // 4K
3331
#define FILECACHE_EX_DEFAULT_MAX_NUM 100
@@ -59,8 +57,8 @@ typedef struct file_cache_ex_s {
5957
memset(etag, 0, sizeof(etag));
6058
}
6159

62-
// Fixed: avoids shadowing struct stat member with stat() call
63-
// NOTE: caller must hold mutex
60+
// NOTE: caller must hold mutex.
61+
// On Windows, Open() uses _wstat() directly instead of calling this.
6462
bool is_modified() {
6563
time_t mtime = st.st_mtime;
6664
::stat(filepath.c_str(), &st);
@@ -74,9 +72,9 @@ typedef struct file_cache_ex_s {
7472
}
7573

7674
// NOTE: caller must hold mutex — invalidates filebuf/httpbuf pointers
77-
void resize_buf(int filesize, int reserved) {
75+
void resize_buf(size_t filesize, int reserved) {
7876
header_reserve = reserved;
79-
buf.resize(reserved + filesize);
77+
buf.resize((size_t)reserved + filesize);
8078
filebuf.base = buf.base + reserved;
8179
filebuf.len = filesize;
8280
// Invalidate httpbuf since buffer may have been reallocated
@@ -85,17 +83,17 @@ typedef struct file_cache_ex_s {
8583
header_used = 0;
8684
}
8785

88-
void resize_buf(int filesize) {
86+
void resize_buf(size_t filesize) {
8987
resize_buf(filesize, header_reserve);
9088
}
9189

9290
// Thread-safe: prepend header into reserved space.
9391
// Returns true on success, false if header exceeds reserved space.
9492
bool prepend_header(const char* header, int len) {
9593
std::lock_guard<std::mutex> lock(mutex);
96-
if (len > header_reserve) return false;
94+
if (len <= 0 || len > header_reserve) return false;
9795
httpbuf.base = filebuf.base - len;
98-
httpbuf.len = len + filebuf.len;
96+
httpbuf.len = (size_t)len + filebuf.len;
9997
memcpy(httpbuf.base, header, len);
10098
header_used = len;
10199
return true;
@@ -105,12 +103,12 @@ typedef struct file_cache_ex_s {
105103
int get_header_reserve() const { return header_reserve; }
106104
int get_header_used() const { std::lock_guard<std::mutex> lock(mutex); return header_used; }
107105
int get_header_remaining() const { std::lock_guard<std::mutex> lock(mutex); return header_reserve - header_used; }
108-
bool header_fits(int len) const { return len <= header_reserve; }
106+
bool header_fits(int len) const { return len > 0 && len <= header_reserve; }
109107
} file_cache_ex_t;
110108

111109
typedef std::shared_ptr<file_cache_ex_t> file_cache_ex_ptr;
112110

113-
class FileCacheEx : public hv::LRUCache<std::string, file_cache_ex_ptr> {
111+
class HV_EXPORT FileCacheEx : public hv::LRUCache<std::string, file_cache_ex_ptr> {
114112
public:
115113
// --- configurable parameters (were hardcoded macros before) ---
116114
int stat_interval; // seconds between stat() checks

0 commit comments

Comments
 (0)