Changeset 19f24fd in mainline for uspace/lib/libc
- Timestamp:
- 2010-02-05T22:25:52Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- dafa2d04
- Parents:
- 83349b03 (diff), d42976c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/lib/libc
- Files:
-
- 11 added
- 12 edited
-
arch/amd64/include/inttypes.h (added)
-
arch/arm32/include/inttypes.h (added)
-
arch/ia32/include/inttypes.h (added)
-
arch/ia64/include/fibril.h (modified) (1 diff)
-
arch/ia64/include/inttypes.h (added)
-
arch/mips32/include/inttypes.h (added)
-
arch/mips32eb/include/inttypes.h (added)
-
arch/ppc32/include/inttypes.h (added)
-
arch/sparc64/include/fibril.h (modified) (1 diff)
-
arch/sparc64/include/inttypes.h (added)
-
generic/adt/hash_table.c (modified) (1 diff)
-
generic/async.c (modified) (8 diffs)
-
generic/clipboard.c (modified) (2 diffs)
-
generic/vfs/vfs.c (modified) (3 diffs)
-
include/adt/hash_table.h (modified) (1 diff)
-
include/async.h (modified) (1 diff)
-
include/fibril.h (modified) (4 diffs)
-
include/inttypes.h (added)
-
include/ipc/adb.h (added)
-
include/ipc/clipboard.h (modified) (1 diff)
-
include/ipc/vfs.h (modified) (5 diffs)
-
include/sys/typefmt.h (added)
-
include/vfs/vfs.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/libc/arch/ia64/include/fibril.h
r83349b03 r19f24fd 52 52 /* Stack is divided into two equal parts (for memory stack and register stack). */ 53 53 #define PSTHREAD_INITIAL_STACK_DIVISION 2 54 55 #ifdef context_set56 #undef context_set57 #endif58 54 59 55 #define context_set(c, _pc, stack, size, tls) \ -
uspace/lib/libc/arch/sparc64/include/fibril.h
r83349b03 r19f24fd 42 42 #define SP_DELTA (STACK_WINDOW_SAVE_AREA_SIZE + STACK_ARG_SAVE_AREA_SIZE) 43 43 44 #ifdef context_set45 #undef context_set46 #endif47 48 44 #define context_set(c, _pc, stack, size, ptls) \ 49 45 do { \ -
uspace/lib/libc/generic/adt/hash_table.c
r83349b03 r19f24fd 193 193 } 194 194 195 /** Apply fucntion to all items in hash table. 196 * 197 * @param h Hash table. 198 * @param f Function to be applied. 199 * @param arg Argument to be passed to the function. 200 */ 201 void 202 hash_table_apply(hash_table_t *h, void (*f)(link_t *, void *), void *arg) 203 { 204 hash_index_t bucket; 205 link_t *cur; 206 207 for (bucket = 0; bucket < h->entries; bucket++) { 208 for (cur = h->entry[bucket].next; cur != &h->entry[bucket]; 209 cur = cur->next) { 210 f(cur, arg); 211 } 212 } 213 } 214 195 215 /** @} 196 216 */ -
uspace/lib/libc/generic/async.c
r83349b03 r19f24fd 1287 1287 } 1288 1288 1289 /** Wrapper for forwarding any read request 1290 * 1291 * 1292 */ 1293 int async_data_read_forward_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, 1294 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipc_call_t *dataptr) 1295 { 1296 ipc_callid_t callid; 1297 if (!async_data_read_receive(&callid, NULL)) { 1298 ipc_answer_0(callid, EINVAL); 1299 return EINVAL; 1300 } 1301 1302 aid_t msg = async_send_fast(phoneid, method, arg1, arg2, arg3, arg4, 1303 dataptr); 1304 if (msg == 0) { 1305 ipc_answer_0(callid, EINVAL); 1306 return EINVAL; 1307 } 1308 1309 int retval = ipc_forward_fast(callid, phoneid, 0, 0, 0, 1310 IPC_FF_ROUTE_FROM_ME); 1311 if (retval != EOK) { 1312 ipc_answer_0(callid, retval); 1313 return retval; 1314 } 1315 1316 ipcarg_t rc; 1317 async_wait_for(msg, &rc); 1318 1319 return (int) rc; 1320 } 1321 1289 1322 /** Wrapper for making IPC_M_DATA_WRITE calls using the async framework. 1290 1323 * 1291 * @param phoneid Phone that will be used to contact the receiving side. 1292 * @param src Address of the beginning of the source buffer. 1293 * @param size Size of the source buffer. 1294 * 1295 * @return Zero on success or a negative error code from errno.h. 1324 * @param phoneid Phone that will be used to contact the receiving side. 1325 * @param src Address of the beginning of the source buffer. 1326 * @param size Size of the source buffer. 1327 * 1328 * @return Zero on success or a negative error code from errno.h. 1329 * 1296 1330 */ 1297 1331 int async_data_write_start(int phoneid, const void *src, size_t size) … … 1308 1342 * So far, this wrapper is to be used from within a connection fibril. 1309 1343 * 1310 * @param callid Storage where the hash of the IPC_M_DATA_WRITE call will 1311 * be stored. 1312 * @param size Storage where the suggested size will be stored. May be 1313 * NULL 1314 * 1315 * @return Non-zero on success, zero on failure. 1344 * @param callid Storage where the hash of the IPC_M_DATA_WRITE call will 1345 * be stored. 1346 * @param size Storage where the suggested size will be stored. May be 1347 * NULL 1348 * 1349 * @return Non-zero on success, zero on failure. 1350 * 1316 1351 */ 1317 1352 int async_data_write_receive(ipc_callid_t *callid, size_t *size) … … 1320 1355 1321 1356 assert(callid); 1322 1357 1323 1358 *callid = async_get_call(&data); 1324 1359 if (IPC_GET_METHOD(data) != IPC_M_DATA_WRITE) 1325 1360 return 0; 1361 1326 1362 if (size) 1327 1363 *size = (size_t) IPC_GET_ARG2(data); 1364 1328 1365 return 1; 1329 1366 } … … 1334 1371 * so that the user doesn't have to remember the meaning of each IPC argument. 1335 1372 * 1336 * @param callid Hash of the IPC_M_DATA_WRITE call to answer. 1337 * @param dst Final destination address for the IPC_M_DATA_WRITE call. 1338 * @param size Final size for the IPC_M_DATA_WRITE call. 1339 * 1340 * @return Zero on success or a value from @ref errno.h on failure. 1373 * @param callid Hash of the IPC_M_DATA_WRITE call to answer. 1374 * @param dst Final destination address for the IPC_M_DATA_WRITE call. 1375 * @param size Final size for the IPC_M_DATA_WRITE call. 1376 * 1377 * @return Zero on success or a value from @ref errno.h on failure. 1378 * 1341 1379 */ 1342 1380 int async_data_write_finalize(ipc_callid_t callid, void *dst, size_t size) … … 1345 1383 } 1346 1384 1347 /** Wrapper for receiving b lobs via the async_data_write_*1385 /** Wrapper for receiving binary data or strings 1348 1386 * 1349 1387 * This wrapper only makes it more comfortable to use async_data_write_* 1350 * functions to receive blobs. 1351 * 1352 * @param blob Pointer to data pointer (which should be later disposed 1353 * by free()). If the operation fails, the pointer is not 1354 * touched. 1355 * @param max_size Maximum size (in bytes) of the blob to receive. 0 means 1356 * no limit. 1357 * @param received If not NULL, the size of the received data is stored here. 1388 * functions to receive binary data or strings. 1389 * 1390 * @param data Pointer to data pointer (which should be later disposed 1391 * by free()). If the operation fails, the pointer is not 1392 * touched. 1393 * @param nullterm If true then the received data is always zero terminated. 1394 * This also causes to allocate one extra byte beyond the 1395 * raw transmitted data. 1396 * @param min_size Minimum size (in bytes) of the data to receive. 1397 * @param max_size Maximum size (in bytes) of the data to receive. 0 means 1398 * no limit. 1399 * @param granulariy If non-zero then the size of the received data has to 1400 * be divisible by this value. 1401 * @param received If not NULL, the size of the received data is stored here. 1358 1402 * 1359 1403 * @return Zero on success or a value from @ref errno.h on failure. 1360 1404 * 1361 1405 */ 1362 int async_data_blob_receive(char **blob, const size_t max_size, size_t *received) 1406 int async_data_write_accept(void **data, const bool nullterm, 1407 const size_t min_size, const size_t max_size, const size_t granularity, 1408 size_t *received) 1363 1409 { 1364 1410 ipc_callid_t callid; … … 1369 1415 } 1370 1416 1417 if (size < min_size) { 1418 ipc_answer_0(callid, EINVAL); 1419 return EINVAL; 1420 } 1421 1371 1422 if ((max_size > 0) && (size > max_size)) { 1372 1423 ipc_answer_0(callid, EINVAL); … … 1374 1425 } 1375 1426 1376 char *data = (char *) malloc(size); 1377 if (data == NULL) { 1427 if ((granularity > 0) && ((size % granularity) != 0)) { 1428 ipc_answer_0(callid, EINVAL); 1429 return EINVAL; 1430 } 1431 1432 void *_data; 1433 1434 if (nullterm) 1435 _data = malloc(size + 1); 1436 else 1437 _data = malloc(size); 1438 1439 if (_data == NULL) { 1378 1440 ipc_answer_0(callid, ENOMEM); 1379 1441 return ENOMEM; 1380 1442 } 1381 1443 1382 int rc = async_data_write_finalize(callid, data, size);1444 int rc = async_data_write_finalize(callid, _data, size); 1383 1445 if (rc != EOK) { 1384 free( data);1446 free(_data); 1385 1447 return rc; 1386 1448 } 1387 1449 1388 *blob = data; 1450 if (nullterm) 1451 ((char *) _data)[size] = 0; 1452 1453 *data = _data; 1389 1454 if (received != NULL) 1390 1455 *received = size; … … 1393 1458 } 1394 1459 1395 /** Wrapper for receiving strings via the async_data_write_* 1396 * 1397 * This wrapper only makes it more comfortable to use async_data_write_* 1398 * functions to receive strings. 1399 * 1400 * @param str Pointer to string pointer (which should be later disposed 1401 * by free()). If the operation fails, the pointer is not 1402 * touched. 1403 * @param max_size Maximum size (in bytes) of the string to receive. 0 means 1404 * no limit. 1405 * 1406 * @return Zero on success or a value from @ref errno.h on failure. 1407 * 1408 */ 1409 int async_data_string_receive(char **str, const size_t max_size) 1460 /** Wrapper for voiding any data that is about to be received 1461 * 1462 * This wrapper can be used to void any pending data 1463 * 1464 * @param retval Error value from @ref errno.h to be returned to the caller. 1465 * 1466 */ 1467 void async_data_write_void(const int retval) 1410 1468 { 1411 1469 ipc_callid_t callid; 1412 size_t size; 1413 if (!async_data_write_receive(&callid, &size)) { 1470 async_data_write_receive(&callid, NULL); 1471 ipc_answer_0(callid, retval); 1472 } 1473 1474 /** Wrapper for forwarding any data that is about to be received 1475 * 1476 * 1477 */ 1478 int async_data_write_forward_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, 1479 ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipc_call_t *dataptr) 1480 { 1481 ipc_callid_t callid; 1482 if (!async_data_write_receive(&callid, NULL)) { 1414 1483 ipc_answer_0(callid, EINVAL); 1415 1484 return EINVAL; 1416 1485 } 1417 1486 1418 if ((max_size > 0) && (size > max_size)) { 1487 aid_t msg = async_send_fast(phoneid, method, arg1, arg2, arg3, arg4, 1488 dataptr); 1489 if (msg == 0) { 1419 1490 ipc_answer_0(callid, EINVAL); 1420 1491 return EINVAL; 1421 1492 } 1422 1493 1423 char *data = (char *) malloc(size + 1); 1424 if (data == NULL) { 1425 ipc_answer_0(callid, ENOMEM); 1426 return ENOMEM; 1427 } 1428 1429 int rc = async_data_write_finalize(callid, data, size); 1430 if (rc != EOK) { 1431 free(data); 1432 return rc; 1433 } 1434 1435 data[size] = 0; 1436 *str = data; 1437 return EOK; 1494 int retval = ipc_forward_fast(callid, phoneid, 0, 0, 0, 1495 IPC_FF_ROUTE_FROM_ME); 1496 if (retval != EOK) { 1497 ipc_answer_0(callid, retval); 1498 return retval; 1499 } 1500 1501 ipcarg_t rc; 1502 async_wait_for(msg, &rc); 1503 1504 return (int) rc; 1438 1505 } 1439 1506 -
uspace/lib/libc/generic/clipboard.c
r83349b03 r19f24fd 84 84 clip_connect(); 85 85 86 aid_t req = async_send_1(clip_phone, CLIPBOARD_PUT_DATA, CLIPBOARD_TAG_ BLOB, NULL);86 aid_t req = async_send_1(clip_phone, CLIPBOARD_PUT_DATA, CLIPBOARD_TAG_DATA, NULL); 87 87 ipcarg_t rc = async_data_write_start(clip_phone, (void *) str, size); 88 88 if (rc != EOK) { … … 139 139 *str = sbuf; 140 140 return EOK; 141 case CLIPBOARD_TAG_ BLOB:141 case CLIPBOARD_TAG_DATA: 142 142 sbuf = malloc(size + 1); 143 143 if (sbuf == NULL) -
uspace/lib/libc/generic/vfs/vfs.c
r83349b03 r19f24fd 120 120 const char *opts, unsigned int flags) 121 121 { 122 int res; 122 int null_id = -1; 123 char null[DEVMAP_NAME_MAXLEN]; 124 125 if (str_cmp(fqdn, "") == 0) { 126 /* No device specified, create a fresh 127 null/%d device instead */ 128 null_id = devmap_null_create(); 129 130 if (null_id == -1) 131 return ENOMEM; 132 133 snprintf(null, DEVMAP_NAME_MAXLEN, "null/%d", null_id); 134 fqdn = null; 135 } 136 137 dev_handle_t dev_handle; 138 int res = devmap_device_get_handle(fqdn, &dev_handle, flags); 139 if (res != EOK) { 140 if (null_id != -1) 141 devmap_null_destroy(null_id); 142 143 return res; 144 } 145 146 size_t mpa_size; 147 char *mpa = absolutize(mp, &mpa_size); 148 if (!mpa) { 149 if (null_id != -1) 150 devmap_null_destroy(null_id); 151 152 return ENOMEM; 153 } 154 155 futex_down(&vfs_phone_futex); 156 async_serialize_start(); 157 vfs_connect(); 158 159 ipcarg_t rc_orig; 160 aid_t req = async_send_2(vfs_phone, VFS_IN_MOUNT, dev_handle, flags, NULL); 161 ipcarg_t rc = async_data_write_start(vfs_phone, (void *) mpa, mpa_size); 162 if (rc != EOK) { 163 async_wait_for(req, &rc_orig); 164 async_serialize_end(); 165 futex_up(&vfs_phone_futex); 166 free(mpa); 167 168 if (null_id != -1) 169 devmap_null_destroy(null_id); 170 171 if (rc_orig == EOK) 172 return (int) rc; 173 else 174 return (int) rc_orig; 175 } 176 177 rc = async_data_write_start(vfs_phone, (void *) opts, str_size(opts)); 178 if (rc != EOK) { 179 async_wait_for(req, &rc_orig); 180 async_serialize_end(); 181 futex_up(&vfs_phone_futex); 182 free(mpa); 183 184 if (null_id != -1) 185 devmap_null_destroy(null_id); 186 187 if (rc_orig == EOK) 188 return (int) rc; 189 else 190 return (int) rc_orig; 191 } 192 193 rc = async_data_write_start(vfs_phone, (void *) fs_name, str_size(fs_name)); 194 if (rc != EOK) { 195 async_wait_for(req, &rc_orig); 196 async_serialize_end(); 197 futex_up(&vfs_phone_futex); 198 free(mpa); 199 200 if (null_id != -1) 201 devmap_null_destroy(null_id); 202 203 if (rc_orig == EOK) 204 return (int) rc; 205 else 206 return (int) rc_orig; 207 } 208 209 /* Ask VFS whether it likes fs_name. */ 210 rc = async_req_0_0(vfs_phone, IPC_M_PING); 211 if (rc != EOK) { 212 async_wait_for(req, &rc_orig); 213 async_serialize_end(); 214 futex_up(&vfs_phone_futex); 215 free(mpa); 216 217 if (null_id != -1) 218 devmap_null_destroy(null_id); 219 220 if (rc_orig == EOK) 221 return (int) rc; 222 else 223 return (int) rc_orig; 224 } 225 226 async_wait_for(req, &rc); 227 async_serialize_end(); 228 futex_up(&vfs_phone_futex); 229 free(mpa); 230 231 if ((rc != EOK) && (null_id != -1)) 232 devmap_null_destroy(null_id); 233 234 return (int) rc; 235 } 236 237 int unmount(const char *mp) 238 { 123 239 ipcarg_t rc; 124 240 ipcarg_t rc_orig; 125 241 aid_t req; 126 dev_handle_t dev_handle;127 128 res = devmap_device_get_handle(fqdn, &dev_handle, flags);129 if (res != EOK)130 return res;131 132 242 size_t mpa_size; 133 char *mpa = absolutize(mp, &mpa_size); 243 char *mpa; 244 245 mpa = absolutize(mp, &mpa_size); 134 246 if (!mpa) 135 247 return ENOMEM; … … 139 251 vfs_connect(); 140 252 141 req = async_send_ 2(vfs_phone, VFS_IN_MOUNT, dev_handle, flags, NULL);253 req = async_send_0(vfs_phone, VFS_IN_UNMOUNT, NULL); 142 254 rc = async_data_write_start(vfs_phone, (void *) mpa, mpa_size); 143 255 if (rc != EOK) { … … 152 264 } 153 265 154 rc = async_data_write_start(vfs_phone, (void *) opts, str_size(opts)); 155 if (rc != EOK) { 156 async_wait_for(req, &rc_orig); 157 async_serialize_end(); 158 futex_up(&vfs_phone_futex); 159 free(mpa); 160 if (rc_orig == EOK) 161 return (int) rc; 162 else 163 return (int) rc_orig; 164 } 165 166 rc = async_data_write_start(vfs_phone, (void *) fs_name, str_size(fs_name)); 167 if (rc != EOK) { 168 async_wait_for(req, &rc_orig); 169 async_serialize_end(); 170 futex_up(&vfs_phone_futex); 171 free(mpa); 172 if (rc_orig == EOK) 173 return (int) rc; 174 else 175 return (int) rc_orig; 176 } 177 178 /* Ask VFS whether it likes fs_name. */ 179 rc = async_req_0_0(vfs_phone, IPC_M_PING); 180 if (rc != EOK) { 181 async_wait_for(req, &rc_orig); 182 async_serialize_end(); 183 futex_up(&vfs_phone_futex); 184 free(mpa); 185 if (rc_orig == EOK) 186 return (int) rc; 187 else 188 return (int) rc_orig; 189 } 190 266 191 267 async_wait_for(req, &rc); 192 268 async_serialize_end(); -
uspace/lib/libc/include/adt/hash_table.h
r83349b03 r19f24fd 88 88 extern void hash_table_remove(hash_table_t *, unsigned long [], hash_count_t); 89 89 extern void hash_table_destroy(hash_table_t *); 90 extern void hash_table_apply(hash_table_t *, void (*)(link_t *, void *), 91 void *); 90 92 91 93 #endif -
uspace/lib/libc/include/async.h
r83349b03 r19f24fd 277 277 extern int async_share_out_receive(ipc_callid_t *, size_t *, int *); 278 278 extern int async_share_out_finalize(ipc_callid_t, void *); 279 280 /* 281 * User-friendly wrappers for async_data_read_forward_fast(). 282 */ 283 #define async_data_read_forward_0_0(phoneid, method, answer) \ 284 async_data_read_forward_fast((phoneid), (method), 0, 0, 0, 0, NULL) 285 #define async_data_read_forward_0_1(phoneid, method, answer) \ 286 async_data_read_forward_fast((phoneid), (method), 0, 0, 0, 0, (answer)) 287 #define async_data_read_forward_1_0(phoneid, method, arg1, answer) \ 288 async_data_read_forward_fast((phoneid), (method), (arg1), 0, 0, 0, NULL) 289 #define async_data_read_forward_1_1(phoneid, method, arg1, answer) \ 290 async_data_read_forward_fast((phoneid), (method), (arg1), 0, 0, 0, (answer)) 291 #define async_data_read_forward_2_0(phoneid, method, arg1, arg2, answer) \ 292 async_data_read_forward_fast((phoneid), (method), (arg1), (arg2), 0, 0, NULL) 293 #define async_data_read_forward_2_1(phoneid, method, arg1, arg2, answer) \ 294 async_data_read_forward_fast((phoneid), (method), (arg1), (arg2), 0, 0, \ 295 (answer)) 296 #define async_data_read_forward_3_0(phoneid, method, arg1, arg2, arg3, answer) \ 297 async_data_read_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, \ 298 NULL) 299 #define async_data_read_forward_3_1(phoneid, method, arg1, arg2, arg3, answer) \ 300 async_data_read_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), 0, \ 301 (answer)) 302 #define async_data_read_forward_4_0(phoneid, method, arg1, arg2, arg3, arg4, answer) \ 303 async_data_read_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 304 (arg4), NULL) 305 #define async_data_read_forward_4_1(phoneid, method, arg1, arg2, arg3, arg4, answer) \ 306 async_data_read_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 307 (arg4), (answer)) 308 279 309 extern int async_data_read_start(int, void *, size_t); 280 310 extern int async_data_read_receive(ipc_callid_t *, size_t *); 281 311 extern int async_data_read_finalize(ipc_callid_t, const void *, size_t); 312 313 extern int async_data_read_forward_fast(int, ipcarg_t, ipcarg_t, ipcarg_t, 314 ipcarg_t, ipcarg_t, ipc_call_t *); 315 316 /* 317 * User-friendly wrappers for async_data_write_forward_fast(). 318 */ 319 #define async_data_write_forward_0_0(phoneid, method, answer) \ 320 async_data_write_forward_fast((phoneid), (method), 0, 0, 0, 0, NULL) 321 #define async_data_write_forward_0_1(phoneid, method, answer) \ 322 async_data_write_forward_fast((phoneid), (method), 0, 0, 0, 0, (answer)) 323 #define async_data_write_forward_1_0(phoneid, method, arg1, answer) \ 324 async_data_write_forward_fast((phoneid), (method), (arg1), 0, 0, 0, NULL) 325 #define async_data_write_forward_1_1(phoneid, method, arg1, answer) \ 326 async_data_write_forward_fast((phoneid), (method), (arg1), 0, 0, 0, \ 327 (answer)) 328 #define async_data_write_forward_2_0(phoneid, method, arg1, arg2, answer) \ 329 async_data_write_forward_fast((phoneid), (method), (arg1), (arg2), 0, 0, \ 330 NULL) 331 #define async_data_write_forward_2_1(phoneid, method, arg1, arg2, answer) \ 332 async_data_write_forward_fast((phoneid), (method), (arg1), (arg2), 0, 0, \ 333 (answer)) 334 #define async_data_write_forward_3_0(phoneid, method, arg1, arg2, arg3, answer) \ 335 async_data_write_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 336 0, NULL) 337 #define async_data_write_forward_3_1(phoneid, method, arg1, arg2, arg3, answer) \ 338 async_data_write_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 339 0, (answer)) 340 #define async_data_write_forward_4_0(phoneid, method, arg1, arg2, arg3, arg4, answer) \ 341 async_data_write_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 342 (arg4), NULL) 343 #define async_data_write_forward_4_1(phoneid, method, arg1, arg2, arg3, arg4, answer) \ 344 async_data_write_forward_fast((phoneid), (method), (arg1), (arg2), (arg3), \ 345 (arg4), (answer)) 346 282 347 extern int async_data_write_start(int, const void *, size_t); 283 348 extern int async_data_write_receive(ipc_callid_t *, size_t *); 284 349 extern int async_data_write_finalize(ipc_callid_t, void *, size_t); 285 350 286 extern int async_data_blob_receive(char **, const size_t, size_t *); 287 extern int async_data_string_receive(char **, const size_t); 351 extern int async_data_write_accept(void **, const bool, const size_t, 352 const size_t, const size_t, size_t *); 353 extern void async_data_write_void(const int); 354 355 extern int async_data_write_forward_fast(int, ipcarg_t, ipcarg_t, ipcarg_t, 356 ipcarg_t, ipcarg_t, ipc_call_t *); 288 357 289 358 #endif -
uspace/lib/libc/include/fibril.h
r83349b03 r19f24fd 40 40 #include <libarch/tls.h> 41 41 42 #ifndef context_set 43 #define context_set(c, _pc, stack, size, ptls) \ 42 #define context_set_generic(c, _pc, stack, size, ptls) \ 44 43 (c)->pc = (sysarg_t) (_pc); \ 45 44 (c)->sp = ((sysarg_t) (stack)) + (size) - SP_DELTA; \ 46 45 (c)->tls = (sysarg_t) (ptls); 47 #endif /* context_set */48 46 49 #define FIBRIL_SERIALIZED 150 #define FIBRIL_WRITER 247 #define FIBRIL_SERIALIZED 1 48 #define FIBRIL_WRITER 2 51 49 52 50 typedef enum { … … 59 57 typedef sysarg_t fid_t; 60 58 61 struct fibril {59 typedef struct fibril { 62 60 link_t link; 63 61 context_t ctx; … … 70 68 int retval; 71 69 int flags; 72 }; 73 typedef struct fibril fibril_t; 70 } fibril_t; 74 71 75 72 /** Fibril-local variable specifier */ 76 73 #define fibril_local __thread 77 74 78 extern int context_save(context_t *c ) __attribute__((returns_twice));79 extern void context_restore(context_t *c ) __attribute__((noreturn));75 extern int context_save(context_t *ctx) __attribute__((returns_twice)); 76 extern void context_restore(context_t *ctx) __attribute__((noreturn)); 80 77 81 78 extern fid_t fibril_create(int (*func)(void *), void *arg); … … 90 87 extern void fibril_dec_sercount(void); 91 88 92 static inline int fibril_yield(void) { 89 static inline int fibril_yield(void) 90 { 93 91 return fibril_switch(FIBRIL_PREEMPT); 94 92 } -
uspace/lib/libc/include/ipc/clipboard.h
r83349b03 r19f24fd 46 46 typedef enum { 47 47 CLIPBOARD_TAG_NONE, 48 CLIPBOARD_TAG_ BLOB48 CLIPBOARD_TAG_DATA 49 49 } clipboard_tag_t; 50 50 -
uspace/lib/libc/include/ipc/vfs.h
r83349b03 r19f24fd 86 86 VFS_OUT_MOUNTED, 87 87 VFS_OUT_UNMOUNT, 88 VFS_OUT_UNMOUNTED, 88 89 VFS_OUT_SYNC, 89 90 VFS_OUT_STAT, … … 100 101 * No lookup flags used. 101 102 */ 102 #define L_NONE 0103 #define L_NONE 0 103 104 104 105 /** … … 107 108 * with L_DIRECTORY. 108 109 */ 109 #define L_FILE 1110 #define L_FILE 1 110 111 111 112 /** 112 * Lookup wil succeed only if the object is a directory. If L_CREATE is113 * Lookup will succeed only if the object is a directory. If L_CREATE is 113 114 * specified, an empty directory will be created. This flag is mutually 114 115 * exclusive with L_FILE. 115 116 */ 116 #define L_DIRECTORY 2 117 #define L_DIRECTORY 2 118 119 /** 120 * Lookup will succeed only if the object is a root directory. The flag is 121 * mutually exclusive with L_FILE and L_MP. 122 */ 123 #define L_ROOT 4 124 125 /** 126 * Lookup will succeed only if the object is a mount point. The flag is mutually 127 * exclusive with L_FILE and L_ROOT. 128 */ 129 #define L_MP 8 130 117 131 118 132 /** … … 120 134 * object already exists. L_EXCLUSIVE is implied when L_DIRECTORY is used. 121 135 */ 122 #define L_EXCLUSIVE 4136 #define L_EXCLUSIVE 16 123 137 124 138 /** 125 139 * L_CREATE is used for creating both regular files and directories. 126 140 */ 127 #define L_CREATE 8141 #define L_CREATE 32 128 142 129 143 /** 130 144 * L_LINK is used for linking to an already existing nodes. 131 145 */ 132 #define L_LINK 16146 #define L_LINK 64 133 147 134 148 /** … … 137 151 * VFS_UNLINK. 138 152 */ 139 #define L_UNLINK 32153 #define L_UNLINK 128 140 154 141 155 /** 142 * L_OPEN is used to indicate that the lookup operation is a part of VFS_ OPEN156 * L_OPEN is used to indicate that the lookup operation is a part of VFS_IN_OPEN 143 157 * call from the client. This means that the server might allocate some 144 158 * resources for the opened file. This flag cannot be passed directly by the 145 159 * client. 146 160 */ 147 #define L_OPEN 64161 #define L_OPEN 256 148 162 149 163 #endif -
uspace/lib/libc/include/vfs/vfs.h
r83349b03 r19f24fd 55 55 extern int mount(const char *, const char *, const char *, const char *, 56 56 unsigned int); 57 extern int unmount(const char *); 57 58 58 59 extern void __stdio_init(int filc, fdi_node_t *filv[]);
Note:
See TracChangeset
for help on using the changeset viewer.
