]> git.sesse.net Git - vlc/blob - src/misc/probe.c
Use var_Inherit* instead of var_CreateGet*.
[vlc] / src / misc / probe.c
1 /*****************************************************************************
2  * probe.c : run-time service listing
3  *****************************************************************************
4  * Copyright © 2009 Rémi Denis-Courmont
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation; either version 2.1 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
19  *****************************************************************************/
20
21 #ifdef HAVE_CONFIG_H
22 # include "config.h"
23 #endif
24
25 #include <vlc_common.h>
26 #include <vlc_probe.h>
27 #include <vlc_modules.h>
28 #include "libvlc.h"
29
30 #undef vlc_probe
31 void *vlc_probe (vlc_object_t *obj,
32                  const char *capability, size_t *restrict pcount)
33 {
34     vlc_probe_t *probe = vlc_custom_create (obj, sizeof(*probe),
35                                             VLC_OBJECT_GENERIC, "probe");
36     if (unlikely(probe == NULL))
37     {
38         *pcount = 0;
39         return NULL;
40     }
41     vlc_object_attach (probe, obj);
42     probe->list = NULL;
43     probe->count = 0;
44
45     module_t *mod = module_need (probe, capability, NULL, false);
46     if (mod != NULL)
47     {
48         msg_Warn (probe, "probing halted");
49         module_unneed (probe, mod);
50     }
51
52     void *ret = probe->list;
53     *pcount = probe->count;
54     vlc_object_release (probe);
55     return ret;
56 }