Skip to content

Instantly share code, notes, and snippets.

@alfredh
Created July 31, 2018 12:33
Show Gist options
  • Select an option

  • Save alfredh/e2faf29e34873958d5f554bb006a0115 to your computer and use it in GitHub Desktop.

Select an option

Save alfredh/e2faf29e34873958d5f554bb006a0115 to your computer and use it in GitHub Desktop.
/**
* @file mediadev.c Media device
*
* Copyright (C) 2010 - 2018 Creytiv.com
*/
#include <re.h>
#include <baresip.h>
static void destructor(void *data)
{
struct mediadev *dev = data;
mem_deref(dev->name);
}
int mediadev_add(struct list *dev_list, const char *name)
{
struct mediadev *dev;
int err;
if (!dev_list || !str_isset(name))
return EINVAL;
dev = mem_zalloc(sizeof(*dev), destructor);
if (!dev)
return ENOMEM;
err = str_dup(&dev->name, name);
if (err)
goto out;
list_append(dev_list, &dev->le, dev);
out:
if (err)
mem_deref(dev);
return err;
}
struct mediadev *mediadev_find(const struct list *dev_list, const char *name)
{
struct le *le;
for (le = list_head(dev_list); le; le = le->next) {
struct mediadev *dev = le->data;
if (!str_casecmp(dev->name, name))
return dev;
}
return NULL;
}
int mediadev_print(struct re_printf *pf, const struct list *dev_list)
{
struct le *le;
int err;
if (!dev_list)
return 0;
err = re_hprintf(pf, "Devices: (%u)\n", list_count(dev_list));
for (le = list_head(dev_list); le; le = le->next) {
struct mediadev *dev = le->data;
err |= re_hprintf(pf, "%s\n", dev->name);
}
return err;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment