Changeset b910455 in mainline for uspace/lib/c
- Timestamp:
- 2011-04-07T09:46:11Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6639ae1
- Parents:
- f6bffee (diff), 8e80d3f (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/c
- Files:
-
- 1 added
- 23 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/Makefile
rf6bffee rb910455 76 76 generic/io/io.c \ 77 77 generic/io/printf.c \ 78 generic/io/log.c \ 78 79 generic/io/klog.c \ 79 80 generic/io/snprintf.c \ -
uspace/lib/c/arch/abs32le/_link.ld.in
rf6bffee rb910455 11 11 12 12 .text : { 13 *(.text );14 *(.rodata *);13 *(.text .text.*); 14 *(.rodata .rodata.*); 15 15 } :text 16 16 -
uspace/lib/c/arch/amd64/_link.ld.in
rf6bffee rb910455 16 16 17 17 .text : { 18 *(.text );19 *(.rodata *);18 *(.text .text.*); 19 *(.rodata .rodata.*); 20 20 } :text 21 21 -
uspace/lib/c/arch/arm32/_link.ld.in
rf6bffee rb910455 15 15 16 16 .text : { 17 *(.text );18 *(.rodata *);17 *(.text .text.*); 18 *(.rodata .rodata.*); 19 19 } :text 20 20 -
uspace/lib/c/arch/ia32/_link.ld.in
rf6bffee rb910455 16 16 17 17 .text : { 18 *(.text );19 *(.rodata *);18 *(.text .text.*); 19 *(.rodata .rodata.*); 20 20 } :text 21 21 -
uspace/lib/c/arch/ia64/_link.ld.in
rf6bffee rb910455 15 15 16 16 .text : { 17 *(.text );18 *(.rodata *);17 *(.text .text.*); 18 *(.rodata .rodata.*); 19 19 } :text 20 20 … … 23 23 .got : { 24 24 _gp = .; 25 *(.got *);25 *(.got .got.*); 26 26 } :data 27 27 -
uspace/lib/c/arch/mips32/_link.ld.in
rf6bffee rb910455 15 15 16 16 .text : { 17 *(.text );18 *(.rodata *);17 *(.text .text.*); 18 *(.rodata .rodata.*); 19 19 } :text 20 20 -
uspace/lib/c/arch/mips32/include/atomic.h
rf6bffee rb910455 70 70 " sc %0, %1\n" 71 71 " beq %0, %4, 1b\n" /* if the atomic operation failed, try again */ 72 /* nop */ /* nop is inserted automatically by compiler */73 72 " nop\n" 74 73 : "=&r" (tmp), -
uspace/lib/c/arch/ppc32/_link.ld.in
rf6bffee rb910455 15 15 16 16 .text : { 17 *(.text );18 *(.rodata *);17 *(.text .text.*); 18 *(.rodata .rodata.*); 19 19 } :text 20 20 -
uspace/lib/c/arch/sparc64/_link.ld.in
rf6bffee rb910455 15 15 16 16 .text : { 17 *(.text );18 *(.rodata *);17 *(.text .text.*); 18 *(.rodata .rodata.*); 19 19 } :text 20 20 -
uspace/lib/c/generic/adt/measured_strings.c
rf6bffee rb910455 74 74 new->length = length; 75 75 new->value = ((uint8_t *) new) + sizeof(measured_string_t); 76 / / append terminating zero explicitly - to be safe76 /* Append terminating zero explicitly - to be safe */ 77 77 memcpy(new->value, string, new->length); 78 78 new->value[new->length] = '\0'; -
uspace/lib/c/generic/async.c
rf6bffee rb910455 1578 1578 */ 1579 1579 int 1580 async_data_read_start_ flexible(int phoneid, void *dst, size_t size, int flags)1580 async_data_read_start_generic(int phoneid, void *dst, size_t size, int flags) 1581 1581 { 1582 1582 return async_req_3_0(phoneid, IPC_M_DATA_READ, (sysarg_t) dst, … … 1677 1677 */ 1678 1678 int 1679 async_data_write_start_ flexible(int phoneid, const void *src, size_t size,1679 async_data_write_start_generic(int phoneid, const void *src, size_t size, 1680 1680 int flags) 1681 1681 { -
uspace/lib/c/generic/devman.c
rf6bffee rb910455 147 147 ret = devman_send_match_id(phone, match_id); 148 148 if (ret != EOK) { 149 printf("Driver failed to send match id, error %d\n",150 ret);151 149 return ret; 152 150 } … … 195 193 } 196 194 197 devman_send_match_ids(phone, match_ids); 198 199 async_wait_for(req, &retval); 200 201 async_serialize_end(); 202 195 int match_ids_rc = devman_send_match_ids(phone, match_ids); 196 197 async_wait_for(req, &retval); 198 199 async_serialize_end(); 200 201 /* Prefer the answer to DEVMAN_ADD_FUNCTION in case of errors. */ 202 if ((match_ids_rc != EOK) && (retval == EOK)) { 203 retval = match_ids_rc; 204 } 205 203 206 if (retval == EOK) 204 207 fun_handle = (int) IPC_GET_ARG1(answer); … … 326 329 } 327 330 331 int devman_device_get_handle_by_class(const char *classname, 332 const char *devname, devman_handle_t *handle, unsigned int flags) 333 { 334 int phone = devman_get_phone(DEVMAN_CLIENT, flags); 335 336 if (phone < 0) 337 return phone; 338 339 async_serialize_start(); 340 341 ipc_call_t answer; 342 aid_t req = async_send_1(phone, DEVMAN_DEVICE_GET_HANDLE_BY_CLASS, 343 flags, &answer); 344 345 sysarg_t retval = async_data_write_start(phone, classname, 346 str_size(classname)); 347 if (retval != EOK) { 348 async_wait_for(req, NULL); 349 async_serialize_end(); 350 return retval; 351 } 352 retval = async_data_write_start(phone, devname, 353 str_size(devname)); 354 if (retval != EOK) { 355 async_wait_for(req, NULL); 356 async_serialize_end(); 357 return retval; 358 } 359 360 async_wait_for(req, &retval); 361 362 async_serialize_end(); 363 364 if (retval != EOK) { 365 if (handle != NULL) 366 *handle = (devman_handle_t) -1; 367 return retval; 368 } 369 370 if (handle != NULL) 371 *handle = (devman_handle_t) IPC_GET_ARG1(answer); 372 373 return retval; 374 } 375 328 376 329 377 /** @} -
uspace/lib/c/generic/net/packet.c
rf6bffee rb910455 190 190 } 191 191 } 192 gpm_destroy(&pm_globals.packet_map );192 gpm_destroy(&pm_globals.packet_map, free); 193 193 /* leave locked */ 194 194 } -
uspace/lib/c/generic/net/socket_client.c
rf6bffee rb910455 749 749 dyn_fifo_destroy(&socket->received); 750 750 dyn_fifo_destroy(&socket->accepted); 751 sockets_exclude(socket_get_sockets(), socket->socket_id );751 sockets_exclude(socket_get_sockets(), socket->socket_id, free); 752 752 } 753 753 -
uspace/lib/c/generic/vfs/vfs.c
rf6bffee rb910455 378 378 379 379 req = async_send_1(vfs_phone, VFS_IN_READ, fildes, &answer); 380 rc = async_data_read_start_ flexible(vfs_phone, (void *) buf, nbyte,380 rc = async_data_read_start_generic(vfs_phone, (void *) buf, nbyte, 381 381 IPC_XF_RESTRICT); 382 382 if (rc != EOK) { … … 408 408 409 409 req = async_send_1(vfs_phone, VFS_IN_WRITE, fildes, &answer); 410 rc = async_data_write_start_ flexible(vfs_phone, (void *) buf, nbyte,410 rc = async_data_write_start_generic(vfs_phone, (void *) buf, nbyte, 411 411 IPC_XF_RESTRICT); 412 412 if (rc != EOK) { … … 758 758 { 759 759 struct stat stat; 760 int rc; 761 762 rc = fstat(fildes, &stat); 763 760 761 int rc = fstat(fildes, &stat); 762 if (rc != 0) 763 return rc; 764 764 765 if (!stat.device) 765 766 return -1; -
uspace/lib/c/include/adt/generic_char_map.h
rf6bffee rb910455 47 47 #define GENERIC_CHAR_MAP_MAGIC_VALUE 0x12345622 48 48 49 /** Generic destructor function pointer. */ 50 #define DTOR_T(identifier) \ 51 void (*identifier)(const void *) 52 49 53 /** Character string to generic type map declaration. 50 54 * @param[in] name Name of the map. … … 64 68 int name##_add(name##_t *, const uint8_t *, const size_t, type *); \ 65 69 int name##_count(name##_t *); \ 66 void name##_destroy(name##_t * ); \67 void name##_exclude(name##_t *, const uint8_t *, const size_t ); \70 void name##_destroy(name##_t *, DTOR_T()); \ 71 void name##_exclude(name##_t *, const uint8_t *, const size_t, DTOR_T()); \ 68 72 type *name##_find(name##_t *, const uint8_t *, const size_t); \ 69 73 int name##_initialize(name##_t *); \ … … 84 88 type *value) \ 85 89 { \ 86 int rc; \87 90 int index; \ 88 91 if (!name##_is_valid(map)) \ … … 91 94 if (index < 0) \ 92 95 return index; \ 93 rc = char_map_add(&map->names, name, length, index); \ 94 if (rc != EOK) { \ 95 name##_items_exclude_index(&map->values, index); \ 96 return rc; \ 97 } \ 98 return EOK; \ 96 return char_map_add(&map->names, name, length, index); \ 99 97 } \ 100 98 \ … … 105 103 } \ 106 104 \ 107 void name##_destroy(name##_t *map ) \105 void name##_destroy(name##_t *map, DTOR_T(dtor)) \ 108 106 { \ 109 107 if (name##_is_valid(map)) { \ 110 108 char_map_destroy(&map->names); \ 111 name##_items_destroy(&map->values ); \109 name##_items_destroy(&map->values, dtor); \ 112 110 } \ 113 111 } \ 114 112 \ 115 113 void name##_exclude(name##_t *map, const uint8_t *name, \ 116 const size_t length ) \114 const size_t length, DTOR_T(dtor)) \ 117 115 { \ 118 116 if (name##_is_valid(map)) { \ … … 121 119 if (index != CHAR_MAP_NULL) \ 122 120 name##_items_exclude_index(&map->values, \ 123 index ); \121 index, dtor); \ 124 122 } \ 125 123 } \ -
uspace/lib/c/include/adt/generic_field.h
rf6bffee rb910455 46 46 #define GENERIC_FIELD_MAGIC_VALUE 0x55667788 47 47 48 /** Generic destructor function pointer. */ 49 #define DTOR_T(identifier) \ 50 void (*identifier)(const void *) 51 48 52 /** Generic type field declaration. 49 53 * … … 63 67 int name##_add(name##_t *, type *); \ 64 68 int name##_count(name##_t *); \ 65 void name##_destroy(name##_t * ); \66 void name##_exclude_index(name##_t *, int ); \69 void name##_destroy(name##_t *, DTOR_T()); \ 70 void name##_exclude_index(name##_t *, int, DTOR_T()); \ 67 71 type **name##_get_field(name##_t *); \ 68 72 type *name##_get_index(name##_t *, int); \ … … 103 107 } \ 104 108 \ 105 void name##_destroy(name##_t *field ) \109 void name##_destroy(name##_t *field, DTOR_T(dtor)) \ 106 110 { \ 107 111 if (name##_is_valid(field)) { \ 108 112 int index; \ 109 113 field->magic = 0; \ 110 for (index = 0; index < field->next; index++) { \ 111 if (field->items[index]) \ 112 free(field->items[index]); \ 114 if (dtor) { \ 115 for (index = 0; index < field->next; index++) { \ 116 if (field->items[index]) \ 117 dtor(field->items[index]); \ 118 } \ 113 119 } \ 114 120 free(field->items); \ … … 116 122 } \ 117 123 \ 118 void name##_exclude_index(name##_t *field, int index ) \124 void name##_exclude_index(name##_t *field, int index, DTOR_T(dtor)) \ 119 125 { \ 120 126 if (name##_is_valid(field) && (index >= 0) && \ 121 127 (index < field->next) && (field->items[index])) { \ 122 free(field->items[index]); \ 128 if (dtor) \ 129 dtor(field->items[index]); \ 123 130 field->items[index] = NULL; \ 124 131 } \ -
uspace/lib/c/include/adt/int_map.h
rf6bffee rb910455 49 49 #define INT_MAP_ITEM_MAGIC_VALUE 0x55667788 50 50 51 /** Generic destructor function pointer. */ 52 #define DTOR_T(identifier) \ 53 void (*identifier)(const void *) 54 51 55 /** Integer to generic type map declaration. 52 56 * … … 72 76 \ 73 77 int name##_add(name##_t *, int, type *); \ 74 void name##_clear(name##_t * ); \78 void name##_clear(name##_t *, DTOR_T()); \ 75 79 int name##_count(name##_t *); \ 76 void name##_destroy(name##_t * ); \77 void name##_exclude(name##_t *, int ); \78 void name##_exclude_index(name##_t *, int ); \80 void name##_destroy(name##_t *, DTOR_T()); \ 81 void name##_exclude(name##_t *, int, DTOR_T()); \ 82 void name##_exclude_index(name##_t *, int, DTOR_T()); \ 79 83 type *name##_find(name##_t *, int); \ 80 84 int name##_update(name##_t *, int, int); \ … … 82 86 int name##_initialize(name##_t *); \ 83 87 int name##_is_valid(name##_t *); \ 84 void name##_item_destroy(name##_item_t * ); \88 void name##_item_destroy(name##_item_t *, DTOR_T()); \ 85 89 int name##_item_is_valid(name##_item_t *); 86 90 … … 115 119 } \ 116 120 \ 117 void name##_clear(name##_t *map ) \121 void name##_clear(name##_t *map, DTOR_T(dtor)) \ 118 122 { \ 119 123 if (name##_is_valid(map)) { \ … … 122 126 if (name##_item_is_valid(&map->items[index])) { \ 123 127 name##_item_destroy( \ 124 &map->items[index] ); \128 &map->items[index], dtor); \ 125 129 } \ 126 130 } \ … … 135 139 } \ 136 140 \ 137 void name##_destroy(name##_t *map ) \141 void name##_destroy(name##_t *map, DTOR_T(dtor)) \ 138 142 { \ 139 143 if (name##_is_valid(map)) { \ … … 143 147 if (name##_item_is_valid(&map->items[index])) { \ 144 148 name##_item_destroy( \ 145 &map->items[index] ); \149 &map->items[index], dtor); \ 146 150 } \ 147 151 } \ … … 150 154 } \ 151 155 \ 152 void name##_exclude(name##_t *map, int key ) \156 void name##_exclude(name##_t *map, int key, DTOR_T(dtor)) \ 153 157 { \ 154 158 if (name##_is_valid(map)) { \ … … 158 162 (map->items[index].key == key)) { \ 159 163 name##_item_destroy( \ 160 &map->items[index] ); \161 } \ 162 } \ 163 } \ 164 } \ 165 \ 166 void name##_exclude_index(name##_t *map, int index ) \164 &map->items[index], dtor); \ 165 } \ 166 } \ 167 } \ 168 } \ 169 \ 170 void name##_exclude_index(name##_t *map, int index, DTOR_T(dtor)) \ 167 171 { \ 168 172 if (name##_is_valid(map) && (index >= 0) && \ 169 173 (index < map->next) && \ 170 174 name##_item_is_valid(&map->items[index])) { \ 171 name##_item_destroy(&map->items[index] ); \175 name##_item_destroy(&map->items[index], dtor); \ 172 176 } \ 173 177 } \ … … 236 240 } \ 237 241 \ 238 void name##_item_destroy(name##_item_t *item ) \242 void name##_item_destroy(name##_item_t *item, DTOR_T(dtor)) \ 239 243 { \ 240 244 if (name##_item_is_valid(item)) { \ 241 245 item->magic = 0; \ 242 246 if (item->value) { \ 243 free(item->value); \ 247 if (dtor) \ 248 dtor(item->value); \ 244 249 item->value = NULL; \ 245 250 } \ -
uspace/lib/c/include/async.h
rf6bffee rb910455 341 341 342 342 #define async_data_read_start(p, buf, len) \ 343 async_data_read_start_ flexible((p), (buf), (len), IPC_XF_NONE)344 345 extern int async_data_read_start_ flexible(int, void *, size_t, int);343 async_data_read_start_generic((p), (buf), (len), IPC_XF_NONE) 344 345 extern int async_data_read_start_generic(int, void *, size_t, int); 346 346 extern bool async_data_read_receive(ipc_callid_t *, size_t *); 347 347 extern int async_data_read_finalize(ipc_callid_t, const void *, size_t); … … 383 383 384 384 #define async_data_write_start(p, buf, len) \ 385 async_data_write_start_ flexible((p), (buf), (len), IPC_XF_NONE)386 387 extern int async_data_write_start_ flexible(int, const void *, size_t, int);385 async_data_write_start_generic((p), (buf), (len), IPC_XF_NONE) 386 387 extern int async_data_write_start_generic(int, const void *, size_t, int); 388 388 extern bool async_data_write_receive(ipc_callid_t *, size_t *); 389 389 extern int async_data_write_finalize(ipc_callid_t, void *, size_t); -
uspace/lib/c/include/devman.h
rf6bffee rb910455 53 53 extern int devman_device_get_handle(const char *, devman_handle_t *, 54 54 unsigned int); 55 extern int devman_device_get_handle_by_class(const char *, const char *, 56 devman_handle_t *, unsigned int); 55 57 56 58 extern int devman_add_device_to_class(devman_handle_t, const char *); -
uspace/lib/c/include/io/log.h
rf6bffee rb910455 1 1 /* 2 * Copyright (c) 2005 Sergey Bondari 2 * Copyright (c) 2011 Vojtech Horky 3 * Copyright (c) 2011 Jiri Svoboda 3 4 * All rights reserved. 4 5 * … … 27 28 */ 28 29 29 /** @addtogroup amd6430 /** @addtogroup libc 30 31 * @{ 31 32 */ 32 /** @file33 */34 33 35 #ifndef KERN_amd64_MEMSTR_H_36 #define KERN_amd64_MEMSTR_H_34 #ifndef LIBC_IO_LOG_H_ 35 #define LIBC_IO_LOG_H_ 37 36 38 # define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt))37 #include <stdarg.h> 39 38 40 extern void memsetw(void *, size_t, uint16_t); 41 extern void memsetb(void *, size_t, uint8_t); 39 typedef enum { 40 LVL_FATAL, 41 LVL_ERROR, 42 LVL_WARN, 43 LVL_NOTE, 44 LVL_DEBUG, 45 LVL_DEBUG2, 46 47 /** For checking range of values */ 48 LVL_LIMIT 49 } log_level_t; 50 51 extern int log_init(const char *, log_level_t); 52 extern void log_msg(log_level_t, const char *, ...); 53 extern void log_msgv(log_level_t, const char *, va_list); 42 54 43 55 #endif -
uspace/lib/c/include/ipc/devman.h
rf6bffee rb910455 148 148 149 149 typedef enum { 150 DEVMAN_DEVICE_GET_HANDLE = IPC_FIRST_USER_METHOD 150 DEVMAN_DEVICE_GET_HANDLE = IPC_FIRST_USER_METHOD, 151 DEVMAN_DEVICE_GET_HANDLE_BY_CLASS 151 152 } client_to_devman_t; 152 153 -
uspace/lib/c/include/ipc/services.h
rf6bffee rb910455 47 47 SERVICE_DEVMAP, 48 48 SERVICE_DEVMAN, 49 SERVICE_FHC, 50 SERVICE_OBIO, 51 SERVICE_APIC, 52 SERVICE_I8259, 49 SERVICE_IRC, 53 50 SERVICE_CLIPBOARD, 54 51 SERVICE_NETWORKING,
Note:
See TracChangeset
for help on using the changeset viewer.