Changeset c9f3b45c in mainline for uspace/lib/drv/generic/driver.c
- Timestamp:
- 2010-05-27T15:16:49Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 692c40cb
- Parents:
- 957cfa58
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/drv/generic/driver.c
r957cfa58 rc9f3b45c 89 89 } 90 90 91 /** Wrapper for receiving strings92 *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 disposed97 * by free()). If the operation fails, the pointer is not98 * touched.99 * @param max_size Maximum size (in bytes) of the string to receive. 0 means100 * 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 140 91 int register_interrupt_handler(device_t *dev, int irq, interrupt_handler_t *handler, irq_code_t *pseudocode) 141 92 { … … 213 164 dev->handle = dev_handle; 214 165 215 async_ string_receive(&dev_name, 0, NULL);166 async_data_write_accept((void **)&dev_name, true, 0, 0, 0, 0); 216 167 dev->name = dev_name; 217 168
Note:
See TracChangeset
for help on using the changeset viewer.