Home | History | Annotate | Download | only in util
      1 /*
      2  * Notifier lists
      3  *
      4  * Copyright IBM, Corp. 2010
      5  *
      6  * Authors:
      7  *  Anthony Liguori   <aliguori (at) us.ibm.com>
      8  *
      9  * This work is licensed under the terms of the GNU GPL, version 2.  See
     10  * the COPYING file in the top-level directory.
     11  *
     12  * Contributions after 2012-01-13 are licensed under the terms of the
     13  * GNU GPL, version 2 or (at your option) any later version.
     14  */
     15 
     16 #include "qemu-common.h"
     17 #include "qemu/notify.h"
     18 
     19 void notifier_list_init(NotifierList *list)
     20 {
     21     QLIST_INIT(&list->notifiers);
     22 }
     23 
     24 void notifier_list_add(NotifierList *list, Notifier *notifier)
     25 {
     26     QLIST_INSERT_HEAD(&list->notifiers, notifier, node);
     27 }
     28 
     29 void notifier_remove(Notifier *notifier)
     30 {
     31     QLIST_REMOVE(notifier, node);
     32 }
     33 
     34 void notifier_list_notify(NotifierList *list, void *data)
     35 {
     36     Notifier *notifier, *next;
     37 
     38     QLIST_FOREACH_SAFE(notifier, &list->notifiers, node, next) {
     39         notifier->notify(notifier, data);
     40     }
     41 }
     42 
     43 void notifier_with_return_list_init(NotifierWithReturnList *list)
     44 {
     45     QLIST_INIT(&list->notifiers);
     46 }
     47 
     48 void notifier_with_return_list_add(NotifierWithReturnList *list,
     49                                    NotifierWithReturn *notifier)
     50 {
     51     QLIST_INSERT_HEAD(&list->notifiers, notifier, node);
     52 }
     53 
     54 void notifier_with_return_remove(NotifierWithReturn *notifier)
     55 {
     56     QLIST_REMOVE(notifier, node);
     57 }
     58 
     59 int notifier_with_return_list_notify(NotifierWithReturnList *list, void *data)
     60 {
     61     NotifierWithReturn *notifier, *next;
     62     int ret = 0;
     63 
     64     QLIST_FOREACH_SAFE(notifier, &list->notifiers, node, next) {
     65         ret = notifier->notify(notifier, data);
     66         if (ret != 0) {
     67             break;
     68         }
     69     }
     70     return ret;
     71 }
     72