summaryrefslogtreecommitdiffstats
path: root/player/javascript.c
diff options
context:
space:
mode:
Diffstat (limited to 'player/javascript.c')
-rw-r--r--player/javascript.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/player/javascript.c b/player/javascript.c
index 14c1872d67..3de900bdb1 100644
--- a/player/javascript.c
+++ b/player/javascript.c
@@ -836,6 +836,41 @@ static void script_readdir(js_State *J, void *af)
}
}
+static void script_file_info(js_State *J)
+{
+ const char *path = js_tostring(J, 1);
+
+ struct stat statbuf;
+ if (stat(path, &statbuf) != 0) {
+ push_failure(J, "Cannot stat path");
+ return;
+ }
+ // Clear last error
+ set_last_error(jctx(J), 0, NULL);
+
+ const char * stat_names[] = {
+ "mode", "size",
+ "atime", "mtime", "ctime", NULL
+ };
+ const double stat_values[] = {
+ statbuf.st_mode,
+ statbuf.st_size,
+ statbuf.st_atime,
+ statbuf.st_mtime,
+ statbuf.st_ctime
+ };
+ // Create an object and add all fields
+ push_nums_obj(J, stat_names, stat_values);
+
+ // Convenience booleans
+ js_pushboolean(J, S_ISREG(statbuf.st_mode));
+ js_setproperty(J, -2, "is_file");
+
+ js_pushboolean(J, S_ISDIR(statbuf.st_mode));
+ js_setproperty(J, -2, "is_dir");
+}
+
+
static void script_split_path(js_State *J)
{
const char *p = js_tostring(J, 1);
@@ -1255,6 +1290,7 @@ static const struct fn_entry main_fns[] = {
static const struct fn_entry utils_fns[] = {
AF_ENTRY(readdir, 2),
+ FN_ENTRY(file_info, 1),
FN_ENTRY(split_path, 1),
AF_ENTRY(join_path, 2),
AF_ENTRY(get_user_path, 1),