- Timestamp:
- 2011-03-29T19:32:53Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- eea1dd5
- Parents:
- 2cf95e8 (diff), 93ebe4e (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
- Files:
-
- 1 deleted
- 34 edited
-
app/bdsh/cmds/modules/cat/cat.c (modified) (10 diffs)
-
app/bdsh/cmds/modules/cat/cat.h (modified) (1 diff)
-
app/bdsh/cmds/modules/cp/cp.c (modified) (2 diffs)
-
app/bdsh/cmds/modules/rm/rm.c (modified) (3 diffs)
-
lib/c/generic/net/packet.c (modified) (1 diff)
-
lib/c/generic/net/socket_client.c (modified) (1 diff)
-
lib/c/include/adt/generic_char_map.h (modified) (6 diffs)
-
lib/c/include/adt/generic_field.h (modified) (4 diffs)
-
lib/c/include/adt/int_map.h (modified) (10 diffs)
-
lib/c/include/ipc/services.h (modified) (1 diff)
-
lib/fs/libfs.c (modified) (2 diffs)
-
lib/net/tl/socket_core.c (modified) (3 diffs)
-
lib/net/tl/tl_common.c (modified) (1 diff)
-
srv/devman/devman.c (modified) (3 diffs)
-
srv/devman/main.c (modified) (1 diff)
-
srv/devman/util.c (modified) (1 diff)
-
srv/devman/util.h (modified) (1 diff)
-
srv/hid/kbd/Makefile (modified) (1 diff)
-
srv/hid/kbd/ctl/pl050.c (deleted)
-
srv/hid/kbd/generic/kbd.c (modified) (2 diffs)
-
srv/hid/kbd/include/kbd.h (modified) (1 diff)
-
srv/hid/kbd/port/ns16550.c (modified) (1 diff)
-
srv/hid/kbd/port/z8530.c (modified) (1 diff)
-
srv/hw/irc/apic/apic.c (modified) (1 diff)
-
srv/hw/irc/fhc/fhc.c (modified) (1 diff)
-
srv/hw/irc/i8259/i8259.c (modified) (1 diff)
-
srv/hw/irc/obio/obio.c (modified) (1 diff)
-
srv/hw/netif/ne2000/ne2000.c (modified) (2 diffs)
-
srv/net/il/arp/arp.c (modified) (13 diffs)
-
srv/net/il/ip/ip.c (modified) (1 diff)
-
srv/net/net/net.c (modified) (6 diffs)
-
srv/net/nil/eth/eth.c (modified) (1 diff)
-
srv/net/tl/tcp/tcp.c (modified) (2 diffs)
-
srv/net/tl/udp/udp.c (modified) (3 diffs)
-
srv/vfs/vfs_ops.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bdsh/cmds/modules/cat/cat.c
r2cf95e8 r3317724 1 1 /* Copyright (c) 2008, Tim Post <tinkertim@gmail.com> 2 * Copyright (c) 2011, Martin Sucha 2 3 * All rights reserved. 3 4 * … … 35 36 #include <str.h> 36 37 #include <fcntl.h> 38 #include <io/console.h> 39 #include <io/color.h> 40 #include <io/style.h> 41 #include <io/keycode.h> 42 #include <errno.h> 43 #include <vfs/vfs.h> 44 #include <assert.h> 37 45 38 46 #include "config.h" … … 48 56 49 57 static const char *cat_oops = "That option is not yet supported\n"; 58 static const char *hexchars = "0123456789abcdef"; 59 60 static bool paging_enabled = false; 61 static size_t chars_remaining = 0; 62 static size_t lines_remaining = 0; 63 static sysarg_t console_cols = 0; 64 static sysarg_t console_rows = 0; 65 static bool should_quit = false; 50 66 51 67 static struct option const long_options[] = { … … 56 72 { "buffer", required_argument, 0, 'b' }, 57 73 { "more", no_argument, 0, 'm' }, 74 { "hex", no_argument, 0, 'x' }, 58 75 { 0, 0, 0, 0 } 59 76 }; … … 75 92 " -b, --buffer ## Set the read buffer size to ##\n" 76 93 " -m, --more Pause after each screen full\n" 94 " -x, --hex Print bytes as hex values\n" 77 95 "Currently, %s is under development, some options don't work.\n", 78 96 cmdname, cmdname); … … 82 100 } 83 101 84 static unsigned int cat_file(const char *fname, size_t blen) 102 static void waitprompt() 103 { 104 console_set_pos(fphone(stdout), 0, console_rows-1); 105 console_set_color(fphone(stdout), COLOR_BLUE, COLOR_WHITE, 0); 106 printf("ENTER/SPACE/PAGE DOWN - next page, " 107 "ESC/Q - quit, C - continue unpaged"); 108 fflush(stdout); 109 console_set_style(fphone(stdout), STYLE_NORMAL); 110 } 111 112 static void waitkey() 113 { 114 console_event_t ev; 115 116 while (true) { 117 if (!console_get_event(fphone(stdin), &ev)) { 118 return; 119 } 120 if (ev.type == KEY_PRESS) { 121 if (ev.key == KC_ESCAPE || ev.key == KC_Q) { 122 should_quit = true; 123 return; 124 } 125 if (ev.key == KC_C) { 126 paging_enabled = false; 127 return; 128 } 129 if (ev.key == KC_ENTER || ev.key == KC_SPACE || 130 ev.key == KC_PAGE_DOWN) { 131 return; 132 } 133 } 134 } 135 assert(false); 136 } 137 138 static void newpage() 139 { 140 console_clear(fphone(stdout)); 141 chars_remaining = console_cols; 142 lines_remaining = console_rows-1; 143 } 144 145 static void paged_char(wchar_t c) 146 { 147 putchar(c); 148 if (paging_enabled) { 149 chars_remaining--; 150 if (c == '\n' || chars_remaining == 0) { 151 chars_remaining = console_cols; 152 lines_remaining--; 153 } 154 if (lines_remaining == 0) { 155 fflush(stdout); 156 waitprompt(); 157 waitkey(); 158 newpage(); 159 } 160 } 161 } 162 163 static unsigned int cat_file(const char *fname, size_t blen, bool hex) 85 164 { 86 165 int fd, bytes = 0, count = 0, reads = 0; 87 166 off64_t total = 0; 88 167 char *buff = NULL; 168 int i; 169 size_t offset = 0; 89 170 90 171 fd = open(fname, O_RDONLY); … … 109 190 count += bytes; 110 191 buff[bytes] = '\0'; 111 printf("%s", buff); 192 offset = 0; 193 for (i = 0; i < bytes && !should_quit; i++) { 194 if (hex) { 195 paged_char(hexchars[((uint8_t)buff[i])/16]); 196 paged_char(hexchars[((uint8_t)buff[i])%16]); 197 } 198 else { 199 wchar_t c = str_decode(buff, &offset, bytes); 200 if (c == 0) { 201 // reached end of string 202 break; 203 } 204 paged_char(c); 205 } 206 207 } 112 208 reads++; 113 209 } 114 } while (bytes > 0 );210 } while (bytes > 0 && !should_quit); 115 211 116 212 close(fd); … … 131 227 unsigned int argc, i, ret = 0, buffer = 0; 132 228 int c, opt_ind; 229 bool hex = false; 230 bool more = false; 231 sysarg_t rows, cols; 232 int rc; 233 234 // reset global state 235 // TODO: move to structure? 236 paging_enabled = false; 237 chars_remaining = 0; 238 lines_remaining = 0; 239 console_cols = 0; 240 console_rows = 0; 241 should_quit = false; 133 242 134 243 argc = cli_count_args(argv); 135 244 136 245 for (c = 0, optind = 0, opt_ind = 0; c != -1;) { 137 c = getopt_long(argc, argv, " hvmH:t:b:", long_options, &opt_ind);246 c = getopt_long(argc, argv, "xhvmH:t:b:", long_options, &opt_ind); 138 247 switch (c) { 139 248 case 'h': … … 144 253 return CMD_SUCCESS; 145 254 case 'H': 146 printf( cat_oops);255 printf("%s", cat_oops); 147 256 return CMD_FAILURE; 148 257 case 't': 149 printf( cat_oops);258 printf("%s", cat_oops); 150 259 return CMD_FAILURE; 151 260 case 'b': 152 printf( cat_oops);261 printf("%s", cat_oops); 153 262 break; 154 263 case 'm': 155 printf(cat_oops); 156 return CMD_FAILURE; 264 more = true; 265 break; 266 case 'x': 267 hex = true; 268 break; 157 269 } 158 270 } … … 168 280 if (buffer <= 0) 169 281 buffer = CAT_DEFAULT_BUFLEN; 170 171 for (i = optind; argv[i] != NULL; i++) 172 ret += cat_file(argv[i], buffer); 282 283 if (more) { 284 rc = console_get_size(fphone(stdout), &cols, &rows); 285 if (rc != EOK) { 286 printf("%s - cannot get console size\n", cmdname); 287 return CMD_FAILURE; 288 } 289 console_cols = cols; 290 console_rows = rows; 291 paging_enabled = true; 292 newpage(); 293 } 294 295 for (i = optind; argv[i] != NULL && !should_quit; i++) 296 ret += cat_file(argv[i], buffer, hex); 173 297 174 298 if (ret) -
uspace/app/bdsh/cmds/modules/cat/cat.h
r2cf95e8 r3317724 4 4 /* Prototypes for the cat command, excluding entry points */ 5 5 6 static unsigned int cat_file(const char *, size_t );6 static unsigned int cat_file(const char *, size_t, bool); 7 7 8 8 #endif /* CAT_H */ -
uspace/app/bdsh/cmds/modules/cp/cp.c
r2cf95e8 r3317724 108 108 for (;;) { 109 109 ssize_t res; 110 size_t written = 0; 110 111 111 112 bytes = read(fd1, buff, blen); … … 120 121 * returned less data than requested. 121 122 */ 122 bytes = write(fd2, buff , res);123 bytes = write(fd2, buff + written, res); 123 124 if (bytes < 0) 124 125 goto err; 126 written += bytes; 125 127 res -= bytes; 126 128 } while (res > 0); -
uspace/app/bdsh/cmds/modules/rm/rm.c
r2cf95e8 r3317724 101 101 } 102 102 103 static unsigned int rm_recursive_not_empty_dirs(const char *path) 104 { 105 DIR *dirp; 106 struct dirent *dp; 107 char buff[PATH_MAX]; 108 unsigned int scope; 109 unsigned int ret = 0; 110 111 dirp = opendir(path); 112 if (!dirp) { 113 /* May have been deleted between scoping it and opening it */ 114 cli_error(CL_EFAIL, "Could not open %s", path); 115 return ret; 116 } 117 118 memset(buff, 0, sizeof(buff)); 119 while ((dp = readdir(dirp))) { 120 snprintf(buff, PATH_MAX - 1, "%s/%s", path, dp->d_name); 121 scope = rm_scope(buff); 122 switch (scope) { 123 case RM_BOGUS: 124 break; 125 case RM_FILE: 126 ret += rm_single(buff); 127 break; 128 case RM_DIR: 129 ret += rm_recursive(buff); 130 break; 131 } 132 } 133 134 return ret; 135 } 136 103 137 static unsigned int rm_recursive(const char *path) 104 138 { 105 139 int rc; 140 unsigned int ret = 0; 106 141 107 142 /* First see if it will just go away */ … … 111 146 112 147 /* Its not empty, recursively scan it */ 113 cli_error(CL_ENOTSUP, 114 "Can not remove %s, directory not empty", path); 115 return 1; 148 ret = rm_recursive_not_empty_dirs(path); 149 150 /* Delete directory */ 151 rc = rmdir(path); 152 if (rc == 0) 153 return ret; 154 155 cli_error(CL_ENOTSUP, "Can not remove %s", path); 156 157 return ret + 1; 116 158 } 117 159 … … 227 269 } 228 270 memset(buff, 0, sizeof(buff)); 229 snprintf(buff, len, argv[i]);271 snprintf(buff, len, "%s", argv[i]); 230 272 231 273 scope = rm_scope(buff); -
uspace/lib/c/generic/net/packet.c
r2cf95e8 r3317724 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
r2cf95e8 r3317724 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/include/adt/generic_char_map.h
r2cf95e8 r3317724 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
r2cf95e8 r3317724 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
r2cf95e8 r3317724 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/ipc/services.h
r2cf95e8 r3317724 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, -
uspace/lib/fs/libfs.c
r2cf95e8 r3317724 391 391 if (lflag & L_CREATE) 392 392 (void) ops->destroy(fn); 393 else 394 (void) ops->node_put(fn); 393 395 async_answer_0(rid, rc); 394 396 } else { … … 473 475 if (lflag & L_CREATE) 474 476 (void) ops->destroy(fn); 477 else 478 (void) ops->node_put(fn); 475 479 async_answer_0(rid, rc); 476 480 } else { -
uspace/lib/net/tl/socket_core.c
r2cf95e8 r3317724 107 107 socket_release(socket); 108 108 109 socket_cores_exclude(local_sockets, socket->socket_id );109 socket_cores_exclude(local_sockets, socket->socket_id, free); 110 110 } 111 111 … … 230 230 231 231 fail: 232 socket_port_map_destroy(&socket_port->map );232 socket_port_map_destroy(&socket_port->map, free); 233 233 free(socket_port); 234 234 return rc; … … 649 649 if (socket_port->count <= 0) { 650 650 // destroy the map 651 socket_port_map_destroy(&socket_port->map );651 socket_port_map_destroy(&socket_port->map, free); 652 652 // release the port 653 653 socket_ports_exclude(global_sockets, 654 socket->port );654 socket->port, free); 655 655 } else { 656 656 // remove 657 657 socket_port_map_exclude(&socket_port->map, 658 socket->key, socket->key_length );658 socket->key, socket->key_length, free); 659 659 } 660 660 } -
uspace/lib/net/tl/tl_common.c
r2cf95e8 r3317724 182 182 else 183 183 packet_dimensions_exclude(packet_dimensions, 184 DEVICE_INVALID_ID );184 DEVICE_INVALID_ID, free); 185 185 } 186 186 } -
uspace/srv/devman/devman.c
r2cf95e8 r3317724 266 266 } 267 267 268 if (read(fd, buf, len) <= 0) { 268 ssize_t read_bytes = safe_read(fd, buf, len); 269 if (read_bytes <= 0) { 269 270 printf(NAME ": unable to read file '%s'.\n", conf_path); 270 271 goto cleanup; 271 272 } 272 buf[ len] = 0;273 buf[read_bytes] = 0; 273 274 274 275 suc = parse_match_ids(buf, ids); … … 1123 1124 fun_node_t *find_fun_node_by_path(dev_tree_t *tree, char *path) 1124 1125 { 1126 assert(path != NULL); 1127 1128 bool is_absolute = path[0] == '/'; 1129 if (!is_absolute) { 1130 return NULL; 1131 } 1132 1125 1133 fibril_rwlock_read_lock(&tree->rwlock); 1126 1134 … … 1132 1140 char *rel_path = path; 1133 1141 char *next_path_elem = NULL; 1134 bool cont = (rel_path[0] == '/');1142 bool cont = true; 1135 1143 1136 1144 while (cont && fun != NULL) { -
uspace/srv/devman/main.c
r2cf95e8 r3317724 477 477 dev = fun->dev; 478 478 479 if (fun == NULL && dev == NULL) { 479 /* 480 * For a valid function to connect to we need a device. The root 481 * function, for example, has no device and cannot be connected to. 482 * This means @c dev needs to be valid regardless whether we are 483 * connecting to a device or to a function. 484 */ 485 if (dev == NULL) { 480 486 printf(NAME ": devman_forward error - no device or function with " 481 487 "handle %" PRIun " was found.\n", handle); -
uspace/srv/devman/util.c
r2cf95e8 r3317724 111 111 } 112 112 113 ssize_t safe_read(int fd, void *buffer, size_t size) 114 { 115 if (size == 0) { 116 return 0; 117 } 118 119 uint8_t *buf_ptr = (uint8_t *) buffer; 120 121 size_t total_read = 0; 122 while (total_read < size) { 123 ssize_t bytes_read = read(fd, buf_ptr, size - total_read); 124 if (bytes_read < 0) { 125 /* Error. */ 126 return bytes_read; 127 } else if (bytes_read == 0) { 128 /* Possibly end of file. */ 129 break; 130 } else { 131 /* Read at least something. */ 132 buf_ptr += bytes_read; 133 total_read += bytes_read; 134 } 135 } 136 137 return (ssize_t) total_read; 138 } 139 113 140 /** @} 114 141 */ -
uspace/srv/devman/util.h
r2cf95e8 r3317724 47 47 extern void replace_char(char *, char, char); 48 48 49 extern ssize_t safe_read(int, void *, size_t); 50 49 51 #endif 50 52 -
uspace/srv/hid/kbd/Makefile
r2cf95e8 r3317724 78 78 SOURCES += \ 79 79 port/pl050.c \ 80 ctl/p l050.c80 ctl/pc.c 81 81 endif 82 82 endif -
uspace/srv/hid/kbd/generic/kbd.c
r2cf95e8 r3317724 67 67 static unsigned lock_keys; 68 68 69 int cir_service = 0;70 int cir_phone = -1;69 bool irc_service = false; 70 int irc_phone = -1; 71 71 72 72 #define NUM_LAYOUTS 3 … … 216 216 sysarg_t obio; 217 217 218 if ((sysinfo_get_value("kbd.cir.fhc", &fhc) == EOK) && (fhc)) 219 cir_service = SERVICE_FHC; 220 else if ((sysinfo_get_value("kbd.cir.obio", &obio) == EOK) && (obio)) 221 cir_service = SERVICE_OBIO; 222 223 if (cir_service) { 224 while (cir_phone < 0) 225 cir_phone = service_connect_blocking(cir_service, 0, 0); 218 if (((sysinfo_get_value("kbd.cir.fhc", &fhc) == EOK) && (fhc)) 219 || ((sysinfo_get_value("kbd.cir.obio", &obio) == EOK) && (obio))) 220 irc_service = true; 221 222 if (irc_service) { 223 while (irc_phone < 0) 224 irc_phone = service_connect_blocking(SERVICE_IRC, 0, 0); 226 225 } 227 226 -
uspace/srv/hid/kbd/include/kbd.h
r2cf95e8 r3317724 38 38 #define KBD_KBD_H_ 39 39 40 extern int cir_service; 41 extern int cir_phone; 40 #include <bool.h> 41 42 extern bool irc_service; 43 extern int irc_phone; 42 44 43 45 extern void kbd_push_scancode(int); -
uspace/srv/hid/kbd/port/ns16550.c
r2cf95e8 r3317724 120 120 kbd_push_scancode(scan_code); 121 121 122 if ( cir_service)123 async_msg_1( cir_phone, IRC_CLEAR_INTERRUPT,122 if (irc_service) 123 async_msg_1(irc_phone, IRC_CLEAR_INTERRUPT, 124 124 IPC_GET_IMETHOD(*call)); 125 125 } -
uspace/srv/hid/kbd/port/z8530.c
r2cf95e8 r3317724 108 108 kbd_push_scancode(scan_code); 109 109 110 if ( cir_service)111 async_msg_1( cir_phone, IRC_CLEAR_INTERRUPT,110 if (irc_service) 111 async_msg_1(irc_phone, IRC_CLEAR_INTERRUPT, 112 112 IPC_GET_IMETHOD(*call)); 113 113 } -
uspace/srv/hw/irc/apic/apic.c
r2cf95e8 r3317724 107 107 108 108 async_set_client_connection(apic_connection); 109 service_register(SERVICE_ APIC);109 service_register(SERVICE_IRC); 110 110 111 111 return true; -
uspace/srv/hw/irc/fhc/fhc.c
r2cf95e8 r3317724 136 136 137 137 async_set_client_connection(fhc_connection); 138 service_register(SERVICE_ FHC);138 service_register(SERVICE_IRC); 139 139 140 140 return true; -
uspace/srv/hw/irc/i8259/i8259.c
r2cf95e8 r3317724 149 149 150 150 async_set_client_connection(i8259_connection); 151 service_register(SERVICE_I 8259);151 service_register(SERVICE_IRC); 152 152 153 153 return true; -
uspace/srv/hw/irc/obio/obio.c
r2cf95e8 r3317724 137 137 138 138 async_set_client_connection(obio_connection); 139 service_register(SERVICE_ OBIO);139 service_register(SERVICE_IRC); 140 140 141 141 return true; -
uspace/srv/hw/netif/ne2000/ne2000.c
r2cf95e8 r3317724 75 75 #define IRQ_GET_TSR(call) ((int) IPC_GET_ARG3(call)) 76 76 77 static int irc_service = 0;77 static bool irc_service = false; 78 78 static int irc_phone = -1; 79 79 … … 383 383 sysarg_t i8259; 384 384 385 if ((sysinfo_get_value("apic", &apic) == EOK) && (apic)) 386 irc_service = SERVICE_APIC; 387 else if ((sysinfo_get_value("i8259", &i8259) == EOK) && (i8259)) 388 irc_service = SERVICE_I8259; 385 if (((sysinfo_get_value("apic", &apic) == EOK) && (apic)) 386 || ((sysinfo_get_value("i8259", &i8259) == EOK) && (i8259))) 387 irc_service = true; 389 388 390 389 if (irc_service) { 391 390 while (irc_phone < 0) 392 irc_phone = service_connect_blocking( irc_service, 0, 0);391 irc_phone = service_connect_blocking(SERVICE_IRC, 0, 0); 393 392 } 394 393 -
uspace/srv/net/il/arp/arp.c
r2cf95e8 r3317724 157 157 158 158 arp_clear_addr(&proto->addresses); 159 arp_addr_destroy(&proto->addresses );160 } 161 } 162 163 arp_protos_clear(&device->protos );159 arp_addr_destroy(&proto->addresses, free); 160 } 161 } 162 163 arp_protos_clear(&device->protos, free); 164 164 } 165 165 … … 184 184 } 185 185 186 arp_cache_clear(&arp_globals.cache );186 arp_cache_clear(&arp_globals.cache, free); 187 187 fibril_mutex_unlock(&arp_globals.lock); 188 188 … … 212 212 arp_clear_trans(trans); 213 213 214 arp_addr_exclude(&proto->addresses, address->value, address->length );214 arp_addr_exclude(&proto->addresses, address->value, address->length, free); 215 215 216 216 fibril_mutex_unlock(&arp_globals.lock); … … 345 345 header->protocol_length, trans); 346 346 if (rc != EOK) { 347 /* The generic char map has already freed trans! */347 free(trans); 348 348 return rc; 349 349 } … … 556 556 if (index < 0) { 557 557 fibril_mutex_unlock(&arp_globals.lock); 558 arp_protos_destroy(&device->protos );558 arp_protos_destroy(&device->protos, free); 559 559 free(device); 560 560 return index; … … 569 569 if (device->phone < 0) { 570 570 fibril_mutex_unlock(&arp_globals.lock); 571 arp_protos_destroy(&device->protos );571 arp_protos_destroy(&device->protos, free); 572 572 free(device); 573 573 return EREFUSED; … … 579 579 if (rc != EOK) { 580 580 fibril_mutex_unlock(&arp_globals.lock); 581 arp_protos_destroy(&device->protos );581 arp_protos_destroy(&device->protos, free); 582 582 free(device); 583 583 return rc; … … 589 589 if (rc != EOK) { 590 590 fibril_mutex_unlock(&arp_globals.lock); 591 arp_protos_destroy(&device->protos );591 arp_protos_destroy(&device->protos, free); 592 592 free(device); 593 593 return rc; … … 601 601 free(device->addr); 602 602 free(device->addr_data); 603 arp_protos_destroy(&device->protos );603 arp_protos_destroy(&device->protos, free); 604 604 free(device); 605 605 return rc; … … 614 614 free(device->broadcast_addr); 615 615 free(device->broadcast_data); 616 arp_protos_destroy(&device->protos );616 arp_protos_destroy(&device->protos, free); 617 617 free(device); 618 618 return rc; … … 746 746 arp_clear_trans(trans); 747 747 arp_addr_exclude(&proto->addresses, target->value, 748 target->length );748 target->length, free); 749 749 return EAGAIN; 750 750 } … … 794 794 trans); 795 795 if (rc != EOK) { 796 /* The generic char map has already freed trans! */796 free(trans); 797 797 return rc; 798 798 } … … 807 807 arp_clear_trans(trans); 808 808 arp_addr_exclude(&proto->addresses, target->value, 809 target->length );809 target->length, free); 810 810 return ENOENT; 811 811 } -
uspace/srv/net/il/ip/ip.c
r2cf95e8 r3317724 505 505 if (rc != EOK) { 506 506 fibril_rwlock_write_unlock(&ip_globals.netifs_lock); 507 ip_routes_destroy(&ip_netif->routes );507 ip_routes_destroy(&ip_netif->routes, free); 508 508 free(ip_netif); 509 509 return rc; -
uspace/srv/net/net/net.c
r2cf95e8 r3317724 289 289 if (rc != EOK) 290 290 return rc; 291 291 292 rc = add_module(NULL, &net_globals.modules, (uint8_t *) NE2000_NAME, 292 293 (uint8_t *) NE2000_FILENAME, SERVICE_NE2000, 0, connect_to_service); 293 294 if (rc != EOK) 294 295 return rc; 296 295 297 rc = add_module(NULL, &net_globals.modules, (uint8_t *) ETHERNET_NAME, 296 298 (uint8_t *) ETHERNET_FILENAME, SERVICE_ETHERNET, 0, connect_to_service); 297 299 if (rc != EOK) 298 300 return rc; 301 299 302 rc = add_module(NULL, &net_globals.modules, (uint8_t *) NILDUMMY_NAME, 300 303 (uint8_t *) NILDUMMY_FILENAME, SERVICE_NILDUMMY, 0, connect_to_service); … … 552 555 rc = read_netif_configuration(conf_files[i], netif); 553 556 if (rc != EOK) { 554 measured_strings_destroy(&netif->configuration );557 measured_strings_destroy(&netif->configuration, free); 555 558 free(netif); 556 559 return rc; … … 562 565 if (!setting) { 563 566 fprintf(stderr, "%s: Network interface name is missing\n", NAME); 564 measured_strings_destroy(&netif->configuration );567 measured_strings_destroy(&netif->configuration, free); 565 568 free(netif); 566 569 return EINVAL; … … 571 574 int index = netifs_add(&net_globals.netifs, netif->id, netif); 572 575 if (index < 0) { 573 measured_strings_destroy(&netif->configuration );576 measured_strings_destroy(&netif->configuration, free); 574 577 free(netif); 575 578 return index; … … 583 586 index); 584 587 if (rc != EOK) { 585 measured_strings_destroy(&netif->configuration );586 netifs_exclude_index(&net_globals.netifs, index );588 measured_strings_destroy(&netif->configuration, free); 589 netifs_exclude_index(&net_globals.netifs, index, free); 587 590 return rc; 588 591 } … … 590 593 rc = start_device(netif); 591 594 if (rc != EOK) { 592 printf("%s: Error startinginterface %s (%s)\n", NAME,595 printf("%s: Ignoring failed interface %s (%s)\n", NAME, 593 596 netif->name, str_error(rc)); 594 measured_strings_destroy(&netif->configuration); 595 netifs_exclude_index(&net_globals.netifs, index); 596 597 return rc; 597 measured_strings_destroy(&netif->configuration, free); 598 netifs_exclude_index(&net_globals.netifs, index, free); 599 continue; 598 600 } 599 601 -
uspace/srv/net/nil/eth/eth.c
r2cf95e8 r3317724 214 214 if (rc != EOK) { 215 215 free(eth_globals.broadcast_addr); 216 eth_devices_destroy(ð_globals.devices );216 eth_devices_destroy(ð_globals.devices, free); 217 217 } 218 218 out: -
uspace/srv/net/tl/tcp/tcp.c
r2cf95e8 r3317724 1707 1707 if (socket->port > 0) { 1708 1708 socket_ports_exclude(&tcp_globals.sockets, 1709 socket->port );1709 socket->port, free); 1710 1710 socket->port = 0; 1711 1711 } … … 2492 2492 rc = packet_dimensions_initialize(&tcp_globals.dimensions); 2493 2493 if (rc != EOK) { 2494 socket_ports_destroy(&tcp_globals.sockets );2494 socket_ports_destroy(&tcp_globals.sockets, free); 2495 2495 goto out; 2496 2496 } -
uspace/srv/net/tl/udp/udp.c
r2cf95e8 r3317724 417 417 rc = packet_dimensions_initialize(&udp_globals.dimensions); 418 418 if (rc != EOK) { 419 socket_ports_destroy(&udp_globals.sockets );419 socket_ports_destroy(&udp_globals.sockets, free); 420 420 fibril_rwlock_write_unlock(&udp_globals.lock); 421 421 return rc; … … 434 434 &data); 435 435 if (rc != EOK) { 436 socket_ports_destroy(&udp_globals.sockets );436 socket_ports_destroy(&udp_globals.sockets, free); 437 437 fibril_rwlock_write_unlock(&udp_globals.lock); 438 438 return rc; … … 740 740 int socket_id; 741 741 size_t addrlen; 742 size_t size ;742 size_t size = 0; 743 743 ipc_call_t answer; 744 744 size_t answer_count; -
uspace/srv/vfs/vfs_ops.c
r2cf95e8 r3317724 1234 1234 if (!parentc) { 1235 1235 fibril_rwlock_write_unlock(&namespace_rwlock); 1236 vfs_node_put(old_node); 1236 1237 async_answer_0(rid, rc); 1237 1238 free(old); … … 1251 1252 if (rc != EOK) { 1252 1253 fibril_rwlock_write_unlock(&namespace_rwlock); 1254 vfs_node_put(old_node); 1253 1255 async_answer_0(rid, rc); 1254 1256 free(old); … … 1261 1263 (old_node->devmap_handle != new_par_lr.triplet.devmap_handle)) { 1262 1264 fibril_rwlock_write_unlock(&namespace_rwlock); 1265 vfs_node_put(old_node); 1263 1266 async_answer_0(rid, EXDEV); /* different file systems */ 1264 1267 free(old); … … 1279 1282 if (!new_node) { 1280 1283 fibril_rwlock_write_unlock(&namespace_rwlock); 1284 vfs_node_put(old_node); 1281 1285 async_answer_0(rid, ENOMEM); 1282 1286 free(old); … … 1290 1294 default: 1291 1295 fibril_rwlock_write_unlock(&namespace_rwlock); 1296 vfs_node_put(old_node); 1292 1297 async_answer_0(rid, ENOTEMPTY); 1293 1298 free(old); … … 1300 1305 if (rc != EOK) { 1301 1306 fibril_rwlock_write_unlock(&namespace_rwlock); 1307 vfs_node_put(old_node); 1302 1308 if (new_node) 1303 1309 vfs_node_put(new_node);
Note:
See TracChangeset
for help on using the changeset viewer.
