diff options
author | Alfred E. Heggestad <alfred.heggestad@gmail.com> | 2017-05-26 12:15:19 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-26 12:15:19 +0200 |
commit | 8096fa45a71f0f1cbc93881e3e5733a4e697d75b (patch) | |
tree | 0c49e07fd3b58c4797f3604bd4f2124c038bc401 /src/vidisp.c | |
parent | ebbf920a502d6d460ff3ea8a57db0c624e3a0747 (diff) |
Vidisp api reentrant (#258)
* vidisp: make the API re-entrant
* vidisp: update all modules to re-entrant API
Diffstat (limited to 'src/vidisp.c')
-rw-r--r-- | src/vidisp.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/vidisp.c b/src/vidisp.c index 94ceee5..d267f58 100644 --- a/src/vidisp.c +++ b/src/vidisp.c @@ -14,9 +14,6 @@ struct vidisp_st { }; -static struct list vidispl = LIST_INIT; - - static void destructor(void *arg) { struct vidisp *vd = arg; @@ -29,6 +26,7 @@ static void destructor(void *arg) * Register a Video output display * * @param vp Pointer to allocated Video Display + * @param vidispl List of Video-displays * @param name Name of Video Display * @param alloch Allocation handler * @param updateh Update handler @@ -37,20 +35,20 @@ static void destructor(void *arg) * * @return 0 if success, otherwise errorcode */ -int vidisp_register(struct vidisp **vp, const char *name, +int vidisp_register(struct vidisp **vp, struct list *vidispl, const char *name, vidisp_alloc_h *alloch, vidisp_update_h *updateh, vidisp_disp_h *disph, vidisp_hide_h *hideh) { struct vidisp *vd; - if (!vp) + if (!vp || !vidispl) return EINVAL; vd = mem_zalloc(sizeof(*vd), destructor); if (!vd) return ENOMEM; - list_append(&vidispl, &vd->le, vd); + list_append(vidispl, &vd->le, vd); vd->name = name; vd->alloch = alloch; @@ -65,11 +63,11 @@ int vidisp_register(struct vidisp **vp, const char *name, } -const struct vidisp *vidisp_find(const char *name) +const struct vidisp *vidisp_find(const struct list *vidispl, const char *name) { struct le *le; - for (le = vidispl.head; le; le = le->next) { + for (le = list_head(vidispl); le; le = le->next) { struct vidisp *vd = le->data; if (str_isset(name) && 0 != str_casecmp(name, vd->name)) @@ -87,6 +85,7 @@ const struct vidisp *vidisp_find(const char *name) * Allocate a video display state * * @param stp Pointer to allocated display state + * @param vidispl List of Video-displays * @param name Name of video display * @param prm Video display parameters (optional) * @param dev Display device @@ -95,11 +94,12 @@ const struct vidisp *vidisp_find(const char *name) * * @return 0 if success, otherwise errorcode */ -int vidisp_alloc(struct vidisp_st **stp, const char *name, +int vidisp_alloc(struct vidisp_st **stp, struct list *vidispl, + const char *name, struct vidisp_prm *prm, const char *dev, vidisp_resize_h *resizeh, void *arg) { - struct vidisp *vd = (struct vidisp *)vidisp_find(name); + struct vidisp *vd = (struct vidisp *)vidisp_find(vidispl, name); if (!vd) return ENOENT; |