return unpack(tab, 1, tab.n)
end
--- Fetch over HTTPS
ffi.cdef([[
typedef struct __dirstream DIR;
- struct dirent {
- unsigned long int d_ino;
- long int d_off;
- unsigned short d_reclen;
- unsigned char d_type;
- char d_name[256];
- };
DIR *opendir(const char *name);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);
char *strerror(int errnum);
]])
+-- Fetch over HTTPS
function kluautil.kr_https_fetch(url, out_file, ca_file)
local http_ok, http_request = pcall(require, 'http.request')
local httptls_ok, http_tls = pcall(require, 'http.tls')
local entry = ffi.C.readdir(dir)
while entry ~= nil do
- local entry_name = ffi.string(entry.d_name)
+ local entry_name = ffi.string(ffi.C.kr_dirent_name(entry))
if entry_name ~= '.' and entry_name ~= '..' then
table.insert(results, entry_name)
end
const char *kr_strptime_diff(const char *, const char *, const char *, double *);
time_t kr_file_mtime(const char *);
long long kr_fssize(const char *);
+const char *kr_dirent_name(const struct dirent *);
void lru_free_items_impl(struct lru *);
struct lru *lru_create_impl(unsigned int, unsigned int, knot_mm_t *, knot_mm_t *);
void *lru_get_impl(struct lru *, const char *, unsigned int, unsigned int, _Bool, _Bool *);
kr_strptime_diff
kr_file_mtime
kr_fssize
+ kr_dirent_name
lru_free_items_impl
lru_create_impl
lru_get_impl
return buf.f_frsize * buf.f_blocks;
}
+const char * kr_dirent_name(const struct dirent *de)
+{
+ return de ? de->d_name : NULL;
+}
+
#pragma once
#include <assert.h>
+#include <dirent.h>
#include <stdio.h>
#include <stdbool.h>
#include <sys/socket.h>
KR_EXPORT time_t kr_file_mtime (const char* fname);
/** Return filesystem size in bytes. */
KR_EXPORT long long kr_fssize(const char *path);
+/** Simply return de->dname. (useful from Lua) */
+KR_EXPORT const char * kr_dirent_name(const struct dirent *de);