From 8f9785d128eef0eae656d32d664ae1a8bff0bb12 Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sun, 17 Dec 2017 01:25:23 +0100 Subject: lua+js: Implement utils.getpid() Usable for uniquely identifying mpv instances from subprocesses, controlling mpv with AppleScript, ... Adds a new mp_getpid() wrapper for cross-platform reasons. --- DOCS/man/javascript.rst | 2 ++ DOCS/man/lua.rst | 4 ++++ osdep/getpid.h | 29 +++++++++++++++++++++++++++++ player/javascript.c | 8 ++++++++ player/lua.c | 8 ++++++++ 5 files changed, 51 insertions(+) create mode 100644 osdep/getpid.h diff --git a/DOCS/man/javascript.rst b/DOCS/man/javascript.rst index 2ebdb15896..cd553510eb 100644 --- a/DOCS/man/javascript.rst +++ b/DOCS/man/javascript.rst @@ -180,6 +180,8 @@ Otherwise, where the Lua APIs return ``nil`` on error, JS returns ``undefined``. ``mp.utils.subprocess_detached(t)`` +``mp.utils.getpid()`` (LE) + ``mp.add_hook(type, priority, fn)`` Additional utilities diff --git a/DOCS/man/lua.rst b/DOCS/man/lua.rst index 2e354c282f..53e6d1db21 100644 --- a/DOCS/man/lua.rst +++ b/DOCS/man/lua.rst @@ -682,6 +682,10 @@ strictly part of the guaranteed API. The function returns ``nil``. +``utils.getpid()`` + Returns the process ID of the running mpv process. This can be used to identify + the calling mpv when launching (detached) subprocesses. + ``utils.parse_json(str [, trail])`` Parses the given string argument as JSON, and returns it as a Lua table. On error, returns ``nil, error``. (Currently, ``error`` is just a string diff --git a/osdep/getpid.h b/osdep/getpid.h new file mode 100644 index 0000000000..ace5e292b6 --- /dev/null +++ b/osdep/getpid.h @@ -0,0 +1,29 @@ +/* + * getpid wrapper + * + * This file is part of mpv. + * + * mpv is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * mpv is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with mpv. If not, see . + */ + +#pragma once + +#ifdef _WIN32 +#include +#define mp_getpid() GetCurrentProcessId() +#else // POSIX +#include +#include +#define mp_getpid() getpid() +#endif diff --git a/player/javascript.c b/player/javascript.c index 3de900bdb1..9afc5f10da 100644 --- a/player/javascript.c +++ b/player/javascript.c @@ -40,6 +40,7 @@ #include "osdep/subprocess.h" #include "osdep/timer.h" #include "osdep/threads.h" +#include "osdep/getpid.h" #include "stream/stream.h" #include "sub/osd.h" #include "core.h" @@ -990,6 +991,12 @@ static void script_subprocess_detached(js_State *J, void *af) af_subprocess_common(J, 1, af); } +// args: none +static void script_getpid(js_State *J) +{ + js_pushnumber(J, mp_getpid()); +} + // args: prefixed file name, data (c-str) static void script_write_file(js_State *J, void *af) { @@ -1296,6 +1303,7 @@ static const struct fn_entry utils_fns[] = { AF_ENTRY(get_user_path, 1), AF_ENTRY(subprocess, 1), AF_ENTRY(subprocess_detached, 1), + FN_ENTRY(getpid, 0), FN_ENTRY(read_file, 2), AF_ENTRY(write_file, 2), diff --git a/player/lua.c b/player/lua.c index d928fdfa46..778830976c 100644 --- a/player/lua.c +++ b/player/lua.c @@ -44,6 +44,7 @@ #include "osdep/subprocess.h" #include "osdep/timer.h" #include "osdep/threads.h" +#include "osdep/getpid.h" #include "stream/stream.h" #include "sub/osd.h" #include "core.h" @@ -1252,6 +1253,12 @@ static int script_subprocess_detached(lua_State *L) return 1; } +static int script_getpid(lua_State *L) +{ + lua_pushnumber(L, mp_getpid()); + return 1; +} + static int script_parse_json(lua_State *L) { mp_lua_optarg(L, 2); @@ -1338,6 +1345,7 @@ static const struct fn_entry utils_fns[] = { FN_ENTRY(join_path), FN_ENTRY(subprocess), FN_ENTRY(subprocess_detached), + FN_ENTRY(getpid), FN_ENTRY(parse_json), FN_ENTRY(format_json), {0} -- cgit v1.2.3