|  | /* | 
|  | * QEMU Enhanced Disk Format | 
|  | * | 
|  | * Copyright IBM, Corp. 2010 | 
|  | * | 
|  | * Authors: | 
|  | *  Stefan Hajnoczi   <stefanha@linux.vnet.ibm.com> | 
|  | * | 
|  | * This work is licensed under the terms of the GNU LGPL, version 2 or later. | 
|  | * See the COPYING.LIB file in the top-level directory. | 
|  | * | 
|  | */ | 
|  |  | 
|  | #include "qed.h" | 
|  |  | 
|  | void *gencb_alloc(size_t len, BlockDriverCompletionFunc *cb, void *opaque) | 
|  | { | 
|  | GenericCB *gencb = g_malloc(len); | 
|  | gencb->cb = cb; | 
|  | gencb->opaque = opaque; | 
|  | return gencb; | 
|  | } | 
|  |  | 
|  | void gencb_complete(void *opaque, int ret) | 
|  | { | 
|  | GenericCB *gencb = opaque; | 
|  | BlockDriverCompletionFunc *cb = gencb->cb; | 
|  | void *user_opaque = gencb->opaque; | 
|  |  | 
|  | g_free(gencb); | 
|  | cb(user_opaque, ret); | 
|  | } |