@@ -1197,13 +1197,13 @@ struct no_init {
1197
1197
};
1198
1198
1199
1199
struct llama_file {
1200
- char * name;
1200
+ std::string name;
1201
1201
// use FILE * so we don't have to re-open the file to mmap
1202
1202
FILE * fp;
1203
1203
size_t size;
1204
1204
1205
1205
llama_file(const char * fname, const char * mode) {
1206
- name = strdup( fname) ;
1206
+ name = fname;
1207
1207
fp = ggml_fopen(fname, mode);
1208
1208
if (fp == NULL) {
1209
1209
throw std::runtime_error(format("failed to open %s: %s", fname, strerror(errno)));
@@ -1267,24 +1267,24 @@ struct llama_file {
1267
1267
write_raw(&val, sizeof(val));
1268
1268
}
1269
1269
1270
- size_t read_direct(void * ptr, size_t len, size_t offset) const {
1271
1270
#if defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__)
1271
+ size_t read_direct(void * ptr, size_t len, size_t offset) const {
1272
1272
int page_size = sysconf(_SC_PAGESIZE);
1273
1273
GGML_ASSERT((uintptr_t) ptr % page_size == 0);
1274
1274
GGML_ASSERT(len % page_size == 0);
1275
1275
GGML_ASSERT(offset % page_size == 0);
1276
1276
#ifdef __APPLE__
1277
- int fd = open(name, O_RDONLY);
1277
+ int fd = open(name.c_str() , O_RDONLY);
1278
1278
if (fd == -1) {
1279
- throw std::runtime_error(format("failed to open %s: %s", name, strerror(errno)));
1279
+ throw std::runtime_error(format("failed to open %s: %s", name.c_str() , strerror(errno)));
1280
1280
}
1281
1281
if (fcntl(fd, F_NOCACHE, 1) == -1) {
1282
1282
throw std::runtime_error(format("failed to enable direct I/O: %s", strerror(errno)));
1283
1283
}
1284
1284
#else
1285
- int fd = open(name, O_RDONLY | O_DIRECT);
1285
+ int fd = open(name.c_str() , O_RDONLY | O_DIRECT);
1286
1286
if (fd == -1) {
1287
- throw std::runtime_error(format("failed to open %s for direct I/O: %s", name, strerror(errno)));
1287
+ throw std::runtime_error(format("failed to open %s for direct I/O: %s", name.c_str() , strerror(errno)));
1288
1288
}
1289
1289
#endif
1290
1290
size_t bytes_read = 0;
@@ -1309,6 +1309,7 @@ struct llama_file {
1309
1309
1310
1310
static constexpr bool DIRECT_IO_SUPPORTED = true;
1311
1311
#elif defined(_WIN32)
1312
+ size_t read_direct(void * ptr, size_t len, size_t offset) const {
1312
1313
SYSTEM_INFO siSysInfo;
1313
1314
GetSystemInfo(&siSysInfo);
1314
1315
DWORD dwPageSize = siSysInfo.dwPageSize;
@@ -1318,12 +1319,12 @@ struct llama_file {
1318
1319
1319
1320
HANDLE hFile = ReOpenFile((HANDLE) _get_osfhandle(_fileno(fp)), GENERIC_READ, FILE_SHARE_READ, FILE_FLAG_NO_BUFFERING);
1320
1321
if (hFile == INVALID_HANDLE_VALUE) {
1321
- throw std::runtime_error(format("failed to open %s: %s", name, llama_format_win_err(GetLastError()).c_str()));
1322
+ throw std::runtime_error(format("failed to open %s: %s", name.c_str() , llama_format_win_err(GetLastError()).c_str()));
1322
1323
}
1323
1324
1324
1325
size_t bytes_read = 0;
1325
1326
while (len > 0) {
1326
- OVERLAPPED oOverlap = {0 };
1327
+ OVERLAPPED oOverlap = {};
1327
1328
oOverlap.OffsetHigh = offset >> 32;
1328
1329
oOverlap.Offset = offset;
1329
1330
DWORD nBytesToRead = std::min(len, (size_t) 0xFFFFFFFF & ~(dwPageSize - 1));
@@ -1351,6 +1352,7 @@ struct llama_file {
1351
1352
1352
1353
static constexpr bool DIRECT_IO_SUPPORTED = true;
1353
1354
#else
1355
+ size_t read_direct(void * ptr, size_t len, size_t offset) const {
1354
1356
GGML_UNUSED(ptr);
1355
1357
GGML_UNUSED(len);
1356
1358
GGML_UNUSED(offset);
@@ -1365,7 +1367,6 @@ struct llama_file {
1365
1367
if (fp) {
1366
1368
std::fclose(fp);
1367
1369
}
1368
- free(name);
1369
1370
}
1370
1371
};
1371
1372
using llama_files = std::vector<std::unique_ptr<llama_file>>;
@@ -1607,7 +1608,7 @@ struct llama_anonymous_mmap : llama_mmap {
1607
1608
mapped_fragments.emplace_back(0, size);
1608
1609
}
1609
1610
1610
- void populate(size_t first, size_t last) const {
1611
+ void populate(size_t first, size_t last) const override {
1611
1612
int page_size = sysconf(_SC_PAGESIZE);
1612
1613
1613
1614
align_to_previous_page(&first, page_size);
@@ -1638,7 +1639,7 @@ struct llama_anonymous_mmap : llama_mmap {
1638
1639
}
1639
1640
}
1640
1641
1641
- void populate(size_t first, size_t last) const {
1642
+ void populate(size_t first, size_t last) const override {
1642
1643
SYSTEM_INFO siSysInfo;
1643
1644
GetSystemInfo(&siSysInfo);
1644
1645
DWORD dwPageSize = siSysInfo.dwPageSize;
@@ -1658,7 +1659,7 @@ struct llama_anonymous_mmap : llama_mmap {
1658
1659
throw std::runtime_error("mmap not supported");
1659
1660
}
1660
1661
1661
- void populate(size_t first, size_t last) const {
1662
+ void populate(size_t first, size_t last) const override {
1662
1663
GGML_UNUSED(first);
1663
1664
GGML_UNUSED(last);
1664
1665
0 commit comments