Changeset c9f3b45c in mainline for uspace/lib/drv/generic/driver.c


Ignore:
Timestamp:
2010-05-27T15:16:49Z (14 years ago)
Author:
Lenka Trochtova <trochtova.lenka@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
692c40cb
Parents:
957cfa58
Message:

devman, libdrv: replace async_string_receive by async_data_write_accept

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/drv/generic/driver.c

    r957cfa58 rc9f3b45c  
    8989}
    9090
    91 /** Wrapper for receiving strings
    92  *
    93  * This wrapper only makes it more comfortable to use async_data_write_*
    94  * functions to receive strings.
    95  *
    96  * @param str      Pointer to string pointer (which should be later disposed
    97  *                 by free()). If the operation fails, the pointer is not
    98  *                 touched.
    99  * @param max_size Maximum size (in bytes) of the string to receive. 0 means
    100  *                 no limit.
    101  * @param received If not NULL, the size of the received data is stored here.
    102  *
    103  * @return Zero on success or a value from @ref errno.h on failure.
    104  *
    105  */
    106 static int async_string_receive(char **str, const size_t max_size, size_t *received)
    107 {
    108         ipc_callid_t callid;
    109         size_t size;
    110         if (!async_data_write_receive(&callid, &size)) {
    111                 ipc_answer_0(callid, EINVAL);
    112                 return EINVAL;
    113         }
    114        
    115         if ((max_size > 0) && (size > max_size)) {
    116                 ipc_answer_0(callid, EINVAL);
    117                 return EINVAL;
    118         }
    119        
    120         char *data = (char *) malloc(size + 1);
    121         if (data == NULL) {
    122                 ipc_answer_0(callid, ENOMEM);
    123                 return ENOMEM;
    124         }
    125        
    126         int rc = async_data_write_finalize(callid, data, size);
    127         if (rc != EOK) {
    128                 free(data);
    129                 return rc;
    130         }
    131        
    132         data[size] = 0;
    133         *str = data;
    134         if (received != NULL)
    135                 *received = size;
    136        
    137         return EOK;
    138 }
    139 
    14091int register_interrupt_handler(device_t *dev, int irq, interrupt_handler_t *handler, irq_code_t *pseudocode)
    14192{
     
    213164        dev->handle = dev_handle;
    214165       
    215         async_string_receive(&dev_name, 0, NULL);
     166        async_data_write_accept((void **)&dev_name, true, 0, 0, 0, 0);
    216167        dev->name = dev_name;
    217168       
Note: See TracChangeset for help on using the changeset viewer.