+char *vlclua_find_file( vlc_object_t *p_this, const char *psz_luadirname, const char *psz_name )
+{
+ char *ppsz_dir_list[] = { NULL, NULL, NULL, NULL };
+ char **ppsz_dir;
+ vlclua_dir_list( p_this, psz_luadirname, ppsz_dir_list );
+ for( ppsz_dir = ppsz_dir_list; *ppsz_dir; ppsz_dir++ )
+ {
+ for( const char **ppsz_ext = ppsz_lua_exts; *ppsz_ext; ppsz_ext++ )
+ {
+ char *psz_filename;
+ struct stat st;
+
+ if( asprintf( &psz_filename, "%s"DIR_SEP"%s%s", *ppsz_dir,
+ psz_name, *ppsz_ext ) < 0 )
+ {
+ vlclua_dir_list_free( ppsz_dir_list );
+ return NULL;
+ }
+
+ if( utf8_stat( psz_filename, &st ) == 0
+ && S_ISREG( st.st_mode ) )
+ {
+ vlclua_dir_list_free( ppsz_dir_list );
+ return psz_filename;
+ }
+ free( psz_filename );
+ }
+ }
+ vlclua_dir_list_free( ppsz_dir_list );
+ return NULL;
+}