[vlc-devel] [PATCH 2/3] lua: Expose OpenSubtitles hash function

Hugo Beauzée-Luyssen hugo at beauzee.fr
Mon Apr 20 18:59:56 CEST 2015


---
 modules/lua/Makefile.am |  1 +
 modules/lua/extension.c |  1 +
 modules/lua/intf.c      |  1 +
 modules/lua/libs.h      |  1 +
 modules/lua/libs/hash.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 66 insertions(+)
 create mode 100644 modules/lua/libs/hash.c

diff --git a/modules/lua/Makefile.am b/modules/lua/Makefile.am
index 38a1b8d..00df429 100644
--- a/modules/lua/Makefile.am
+++ b/modules/lua/Makefile.am
@@ -13,6 +13,7 @@ liblua_plugin_la_SOURCES = \
 	lua/libs/equalizer.c \
 	lua/libs/gettext.c \
 	lua/libs/dialog.c \
+	lua/libs/hash.c \
 	lua/libs/httpd.c \
 	lua/libs/input.c lua/libs/input.h \
 	lua/libs/messages.c \
diff --git a/modules/lua/extension.c b/modules/lua/extension.c
index 5958af1..67c7cef 100644
--- a/modules/lua/extension.c
+++ b/modules/lua/extension.c
@@ -843,6 +843,7 @@ static lua_State* GetLuaState( extensions_manager_t *p_mgr,
             luaopen_vlm( L );
             luaopen_volume( L );
             luaopen_xml( L );
+            luaopen_hash( L );
 #if defined(_WIN32) && !VLC_WINSTORE_APP
             luaopen_win( L );
 #endif
diff --git a/modules/lua/intf.c b/modules/lua/intf.c
index 841587f..9d124d2 100644
--- a/modules/lua/intf.c
+++ b/modules/lua/intf.c
@@ -271,6 +271,7 @@ static int Start_LuaIntf( vlc_object_t *p_this, const char *name )
     luaopen_gettext( L );
     luaopen_xml( L );
     luaopen_equalizer( L );
+    luaopen_hash( L );
 #if defined(_WIN32) && !VLC_WINSTORE_APP
     luaopen_win( L );
 #endif
diff --git a/modules/lua/libs.h b/modules/lua/libs.h
index 861cba9..e924eec 100644
--- a/modules/lua/libs.h
+++ b/modules/lua/libs.h
@@ -45,6 +45,7 @@ void luaopen_gettext( lua_State * );
 void luaopen_input_item( lua_State *L, input_item_t *item );
 void luaopen_xml( lua_State *L );
 void luaopen_equalizer( lua_State *L );
+void luaopen_hash( lua_State* L );
 #ifdef _WIN32
 void luaopen_win( lua_State *L );
 #endif
diff --git a/modules/lua/libs/hash.c b/modules/lua/libs/hash.c
new file mode 100644
index 0000000..c1acc2b
--- /dev/null
+++ b/modules/lua/libs/hash.c
@@ -0,0 +1,62 @@
+/*****************************************************************************
+ * hash.c: Expose hash functions to lua extensions
+ *****************************************************************************
+ * Copyright (C) 2003-2015 VLC authors and VideoLAN
+ *
+ * Authors: Hugo Beauzée-Luyssen <hugo at beauzee.fr>
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <vlc_hash.h>
+
+#include "../vlc.h"
+#include "../libs.h"
+
+static int vlclua_hash_OpenSubtitles( lua_State* L )
+{
+    vlc_object_t * p_this = vlclua_get_this( L );
+    const char* psz_uri = luaL_checkstring( L, 1 );
+    if ( p_this == NULL || psz_uri == NULL )
+    {
+        lua_pushnil( L );
+        lua_pushnumber( L, 0 );
+        return 2;
+    }
+    int64_t size = 0;
+    uint64_t hash = hash_OpenSubtitles( p_this, psz_uri, &size );
+    char res[32];
+    snprintf( res, 32, "%"PRIx64, hash );
+    lua_pushstring( L, res );
+    lua_pushnumber( L, size );
+    return 2;
+}
+
+static const luaL_Reg vlclua_hash_reg[] = {
+    { "open_subtitles", vlclua_hash_OpenSubtitles },
+
+    { NULL, NULL }
+};
+
+void luaopen_hash( lua_State* L )
+{
+    lua_newtable( L );
+    luaL_register( L, NULL, vlclua_hash_reg );
+    lua_setfield( L, -2, "hash" );
+}
-- 
2.1.0




More information about the vlc-devel mailing list