Changeset feeac0d in mainline for uspace/srv/audio/hound/hound.c


Ignore:
Timestamp:
2013-09-10T16:32:35Z (11 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4982d87
Parents:
e8d6ce2
Message:

Simplify use of list_foreach.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/audio/hound/hound.c

    re8d6ce2 rfeeac0d  
    4747#include "str_error.h"
    4848
    49 #define FIND_BY_NAME(type) \
    50 do { \
    51         assert(list); \
    52         assert(name); \
    53         list_foreach(*list, it) { \
    54                 audio_ ## type ## _t *dev = \
    55                     audio_ ## type ## _list_instance(it); \
    56                 if (str_cmp(name, dev->name) == 0) { \
    57                         log_debug("%s with name '%s' is in the list", \
    58                             #type, name); \
    59                         return dev; \
    60                 } \
    61         } \
    62         return NULL; \
    63 } while (0)
    64 
    6549/**
    6650 * Search devices by name.
     
    6852 * @return Pointer to the found device, NULL on failure.
    6953 */
    70 static audio_device_t * find_device_by_name(list_t *list, const char *name)
    71 {
    72         FIND_BY_NAME(device);
     54static audio_device_t *find_device_by_name(list_t *list, const char *name)
     55{
     56        assert(list);
     57        assert(name);
     58
     59        list_foreach(*list, link, audio_device_t, dev) {
     60                if (str_cmp(name, dev->name) == 0) {
     61                        log_debug("device with name '%s' is in the list",
     62                            name);
     63                        return dev;
     64                }
     65        }
     66
     67        return NULL;
    7368}
    7469
     
    7873 * @return Pointer to the found source, NULL on failure.
    7974 */
    80 static audio_source_t * find_source_by_name(list_t *list, const char *name)
    81 {
    82         FIND_BY_NAME(source);
     75static audio_source_t *find_source_by_name(list_t *list, const char *name)
     76{
     77        assert(list);
     78        assert(name);
     79
     80        list_foreach(*list, link, audio_source_t, dev) {
     81                if (str_cmp(name, dev->name) == 0) {
     82                        log_debug("source with name '%s' is in the list",
     83                            name);
     84                        return dev;
     85                }
     86        }
     87
     88        return NULL;
    8389}
    8490
     
    8894 * @return Pointer to the found sink, NULL on failure.
    8995 */
    90 static audio_sink_t * find_sink_by_name(list_t *list, const char *name)
    91 {
    92         FIND_BY_NAME(sink);
     96static audio_sink_t *find_sink_by_name(list_t *list, const char *name)
     97{
     98        assert(list);
     99        assert(name);
     100
     101        list_foreach(*list, link, audio_sink_t, dev) {
     102                if (str_cmp(name, dev->name) == 0) {
     103                        log_debug("sink with name '%s' is in the list",
     104                            name);
     105                        return dev;
     106                }
     107        }
     108
     109        return NULL;
    93110}
    94111
     
    111128                log_warning("Removing sink '%s' while still connected.", sink->name);
    112129        while (!list_empty(&sink->connections)) {
    113                 connection_t *conn =
    114                     connection_from_sink_list(list_first(&sink->connections));
     130                connection_t *conn = list_get_instance(
     131                    list_first(&sink->connections), connection_t, sink_link);
    115132                list_remove(&conn->hound_link);
    116133                connection_destroy(conn);
     
    128145static void hound_remove_source_internal(hound_t *hound, audio_source_t *source)
    129146{
    130         assert(hound);
    131         assert(source);
    132147        log_verbose("Removing source '%s'.", source->name);
    133148        if (!list_empty(&source->connections))
    134149                log_warning("Removing source '%s' while still connected.", source->name);
    135150        while (!list_empty(&source->connections)) {
    136                 connection_t *conn =
    137                     connection_from_source_list(list_first(&source->connections));
    138                 assert(conn);
     151                connection_t *conn = list_get_instance(
     152                    list_first(&source->connections), connection_t, source_link);
    139153                list_remove(&conn->hound_link);
    140154                connection_destroy(conn);
     
    223237        fibril_mutex_lock(&hound->list_guard);
    224238        hound_ctx_t *res = NULL;
    225         list_foreach(hound->contexts, it) {
    226                 hound_ctx_t *ctx = hound_ctx_from_link(it);
     239        list_foreach(hound->contexts, link, hound_ctx_t, ctx) {
    227240                if (hound_ctx_get_id(ctx) == id) {
    228241                        res = ctx;
     
    251264        }
    252265
    253         list_foreach(hound->devices, it) {
    254                 audio_device_t *dev = audio_device_list_instance(it);
     266        list_foreach(hound->devices, link, audio_device_t, dev) {
    255267                if (dev->id == id) {
    256268                        log_debug("Device with id %zu is already present", id);
Note: See TracChangeset for help on using the changeset viewer.