Changes in / [3abfe9a8:eaf4c393] in mainline


Ignore:
Files:
2 deleted
21 edited

Legend:

Unmodified
Added
Removed
  • kernel/Makefile

    r3abfe9a8 reaf4c393  
    240240        generic/src/lib/func.c \
    241241        generic/src/lib/memstr.c \
    242         generic/src/lib/memfnc.c \
    243242        generic/src/lib/sort.c \
    244243        generic/src/lib/str.c \
  • kernel/generic/include/memstr.h

    r3abfe9a8 reaf4c393  
    3838#include <typedefs.h>
    3939
    40 #define memset(dst, val, cnt)  __builtin_memset((dst), (val), (cnt))
    41 #define memcpy(dst, src, cnt)  __builtin_memcpy((dst), (src), (cnt))
    42 
    4340extern void memsetb(void *, size_t, uint8_t);
    4441extern void memsetw(void *, size_t, uint16_t);
     42extern void *memset(void *, int, size_t);
     43
     44extern void *memcpy(void *, const void *, size_t);
    4545extern void *memmove(void *, const void *, size_t);
    4646
  • kernel/generic/src/lib/memstr.c

    r3abfe9a8 reaf4c393  
    4343#include <memstr.h>
    4444#include <typedefs.h>
     45#include <align.h>
    4546
    4647/** Fill block of memory.
     
    5556void memsetb(void *dst, size_t cnt, uint8_t val)
    5657{
    57         memset(dst, val, cnt);
     58        __builtin_memset(dst, val, cnt);
    5859}
    5960
     
    7576        for (i = 0; i < cnt; i++)
    7677                ptr[i] = val;
     78}
     79
     80/** Fill block of memory.
     81 *
     82 * Fill cnt bytes at dst address with the value val.
     83 *
     84 * @param dst Destination address to fill.
     85 * @param val Value to fill.
     86 * @param cnt Number of bytes to fill.
     87 *
     88 * @return Destination address.
     89 *
     90 */
     91void *memset(void *dst, int val, size_t cnt)
     92{
     93        return __builtin_memset(dst, val, cnt);
     94}
     95
     96/** Move memory block without overlapping.
     97 *
     98 * Copy cnt bytes from src address to dst address. The source
     99 * and destination memory areas cannot overlap.
     100 *
     101 * @param dst Destination address to copy to.
     102 * @param src Source address to copy from.
     103 * @param cnt Number of bytes to copy.
     104 *
     105 * @return Destination address.
     106 *
     107 */
     108void *memcpy(void *dst, const void *src, size_t cnt)
     109{
     110        return __builtin_memcpy(dst, src, cnt);
    77111}
    78112
     
    99133                return memcpy(dst, src, cnt);
    100134       
     135        const uint8_t *sp;
    101136        uint8_t *dp;
    102         const uint8_t *sp;
    103137       
    104138        /* Which direction? */
    105139        if (src > dst) {
    106140                /* Forwards. */
     141                sp = src;
    107142                dp = dst;
    108                 sp = src;
    109143               
    110144                while (cnt-- != 0)
     
    112146        } else {
    113147                /* Backwards. */
     148                sp = src + (cnt - 1);
    114149                dp = dst + (cnt - 1);
    115                 sp = src + (cnt - 1);
    116150               
    117151                while (cnt-- != 0)
  • uspace/lib/c/generic/net/packet.c

    r3abfe9a8 reaf4c393  
    190190                }
    191191        }
    192         gpm_destroy(&pm_globals.packet_map, free);
     192        gpm_destroy(&pm_globals.packet_map);
    193193        /* leave locked */
    194194}
  • uspace/lib/c/generic/net/socket_client.c

    r3abfe9a8 reaf4c393  
    749749        dyn_fifo_destroy(&socket->received);
    750750        dyn_fifo_destroy(&socket->accepted);
    751         sockets_exclude(socket_get_sockets(), socket->socket_id, free);
     751        sockets_exclude(socket_get_sockets(), socket->socket_id);
    752752}
    753753
  • uspace/lib/c/include/adt/generic_char_map.h

    r3abfe9a8 reaf4c393  
    4747#define GENERIC_CHAR_MAP_MAGIC_VALUE    0x12345622
    4848
    49 /** Generic destructor function pointer. */
    50 #define DTOR_T(identifier) \
    51         void (*identifier)(const void *)
    52 
    5349/** Character string to generic type map declaration.
    5450 *  @param[in] name     Name of the map.
     
    6864        int name##_add(name##_t *, const uint8_t *, const size_t, type *); \
    6965        int name##_count(name##_t *); \
    70         void name##_destroy(name##_t *, DTOR_T()); \
    71         void name##_exclude(name##_t *, const uint8_t *, const size_t, DTOR_T()); \
     66        void name##_destroy(name##_t *); \
     67        void name##_exclude(name##_t *, const uint8_t *, const size_t); \
    7268        type *name##_find(name##_t *, const uint8_t *, const size_t); \
    7369        int name##_initialize(name##_t *); \
     
    8884             type *value) \
    8985        { \
     86                int rc; \
    9087                int index; \
    9188                if (!name##_is_valid(map)) \
     
    9491                if (index < 0) \
    9592                        return index; \
    96                 return char_map_add(&map->names, name, length, 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; \
    9799        } \
    98100        \
     
    103105        } \
    104106        \
    105         void name##_destroy(name##_t *map, DTOR_T(dtor)) \
     107        void name##_destroy(name##_t *map) \
    106108        { \
    107109                if (name##_is_valid(map)) { \
    108110                        char_map_destroy(&map->names); \
    109                         name##_items_destroy(&map->values, dtor); \
     111                        name##_items_destroy(&map->values); \
    110112                } \
    111113        } \
    112114        \
    113115        void name##_exclude(name##_t *map, const uint8_t *name, \
    114             const size_t length, DTOR_T(dtor)) \
     116            const size_t length) \
    115117        { \
    116118                if (name##_is_valid(map)) { \
     
    119121                        if (index != CHAR_MAP_NULL) \
    120122                                name##_items_exclude_index(&map->values, \
    121                                      index, dtor); \
     123                                     index); \
    122124                } \
    123125        } \
  • uspace/lib/c/include/adt/generic_field.h

    r3abfe9a8 reaf4c393  
    4646#define GENERIC_FIELD_MAGIC_VALUE               0x55667788
    4747
    48 /** Generic destructor function pointer. */
    49 #define DTOR_T(identifier) \
    50         void (*identifier)(const void *)
    51 
    5248/** Generic type field declaration.
    5349 *
     
    6763        int name##_add(name##_t *, type *); \
    6864        int name##_count(name##_t *); \
    69         void name##_destroy(name##_t *, DTOR_T()); \
    70         void name##_exclude_index(name##_t *, int, DTOR_T()); \
     65        void name##_destroy(name##_t *); \
     66        void name##_exclude_index(name##_t *, int); \
    7167        type **name##_get_field(name##_t *); \
    7268        type *name##_get_index(name##_t *, int); \
     
    107103        } \
    108104        \
    109         void name##_destroy(name##_t *field, DTOR_T(dtor)) \
     105        void name##_destroy(name##_t *field) \
    110106        { \
    111107                if (name##_is_valid(field)) { \
    112108                        int index; \
    113109                        field->magic = 0; \
    114                         if (dtor) { \
    115                                 for (index = 0; index < field->next; index++) { \
    116                                         if (field->items[index]) \
    117                                                 dtor(field->items[index]); \
    118                                 } \
     110                        for (index = 0; index < field->next; index++) { \
     111                                if (field->items[index]) \
     112                                        free(field->items[index]); \
    119113                        } \
    120114                        free(field->items); \
     
    122116        } \
    123117         \
    124         void name##_exclude_index(name##_t *field, int index, DTOR_T(dtor)) \
     118        void name##_exclude_index(name##_t *field, int index) \
    125119        { \
    126120                if (name##_is_valid(field) && (index >= 0) && \
    127121                    (index < field->next) && (field->items[index])) { \
    128                         if (dtor) \
    129                                 dtor(field->items[index]); \
     122                        free(field->items[index]); \
    130123                        field->items[index] = NULL; \
    131124                } \
  • uspace/lib/c/include/adt/int_map.h

    r3abfe9a8 reaf4c393  
    4949#define INT_MAP_ITEM_MAGIC_VALUE        0x55667788
    5050
    51 /** Generic destructor function pointer. */
    52 #define DTOR_T(identifier) \
    53         void (*identifier)(const void *)
    54 
    5551/** Integer to generic type map declaration.
    5652 *
     
    7672        \
    7773        int name##_add(name##_t *, int, type *); \
    78         void name##_clear(name##_t *, DTOR_T()); \
     74        void name##_clear(name##_t *); \
    7975        int name##_count(name##_t *); \
    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()); \
     76        void name##_destroy(name##_t *); \
     77        void name##_exclude(name##_t *, int); \
     78        void name##_exclude_index(name##_t *, int); \
    8379        type *name##_find(name##_t *, int); \
    8480        int name##_update(name##_t *, int, int); \
     
    8682        int name##_initialize(name##_t *); \
    8783        int name##_is_valid(name##_t *); \
    88         void name##_item_destroy(name##_item_t *, DTOR_T()); \
     84        void name##_item_destroy(name##_item_t *); \
    8985        int name##_item_is_valid(name##_item_t *);
    9086
     
    119115        } \
    120116        \
    121         void name##_clear(name##_t *map, DTOR_T(dtor)) \
     117        void name##_clear(name##_t *map) \
    122118        { \
    123119                if (name##_is_valid(map)) { \
     
    126122                                if (name##_item_is_valid(&map->items[index])) { \
    127123                                        name##_item_destroy( \
    128                                             &map->items[index], dtor); \
     124                                            &map->items[index]); \
    129125                                } \
    130126                        } \
     
    139135        } \
    140136        \
    141         void name##_destroy(name##_t *map, DTOR_T(dtor)) \
     137        void name##_destroy(name##_t *map) \
    142138        { \
    143139                if (name##_is_valid(map)) { \
     
    147143                                if (name##_item_is_valid(&map->items[index])) { \
    148144                                        name##_item_destroy( \
    149                                             &map->items[index], dtor); \
     145                                            &map->items[index]); \
    150146                                } \
    151147                        } \
     
    154150        } \
    155151        \
    156         void name##_exclude(name##_t *map, int key, DTOR_T(dtor)) \
     152        void name##_exclude(name##_t *map, int key) \
    157153        { \
    158154                if (name##_is_valid(map)) { \
     
    162158                                    (map->items[index].key == key)) { \
    163159                                        name##_item_destroy( \
    164                                             &map->items[index], dtor); \
    165                                 } \
    166                         } \
    167                 } \
    168         } \
    169         \
    170         void name##_exclude_index(name##_t *map, int index, DTOR_T(dtor)) \
     160                                            &map->items[index]); \
     161                                } \
     162                        } \
     163                } \
     164        } \
     165        \
     166        void name##_exclude_index(name##_t *map, int index) \
    171167        { \
    172168                if (name##_is_valid(map) && (index >= 0) && \
    173169                    (index < map->next) && \
    174170                    name##_item_is_valid(&map->items[index])) { \
    175                         name##_item_destroy(&map->items[index], dtor); \
     171                        name##_item_destroy(&map->items[index]); \
    176172                } \
    177173        } \
     
    240236        } \
    241237        \
    242         void name##_item_destroy(name##_item_t *item, DTOR_T(dtor)) \
     238        void name##_item_destroy(name##_item_t *item) \
    243239        { \
    244240                if (name##_item_is_valid(item)) { \
    245241                        item->magic = 0; \
    246242                        if (item->value) { \
    247                                 if (dtor) \
    248                                         dtor(item->value); \
     243                                free(item->value); \
    249244                                item->value = NULL; \
    250245                        } \
  • uspace/lib/net/tl/socket_core.c

    r3abfe9a8 reaf4c393  
    107107                socket_release(socket);
    108108
    109         socket_cores_exclude(local_sockets, socket->socket_id, free);
     109        socket_cores_exclude(local_sockets, socket->socket_id);
    110110}
    111111
     
    230230
    231231fail:
    232         socket_port_map_destroy(&socket_port->map, free);
     232        socket_port_map_destroy(&socket_port->map);
    233233        free(socket_port);
    234234        return rc;
     
    649649                        if (socket_port->count <= 0) {
    650650                                // destroy the map
    651                                 socket_port_map_destroy(&socket_port->map, free);
     651                                socket_port_map_destroy(&socket_port->map);
    652652                                // release the port
    653653                                socket_ports_exclude(global_sockets,
    654                                     socket->port, free);
     654                                    socket->port);
    655655                        } else {
    656656                                // remove
    657657                                socket_port_map_exclude(&socket_port->map,
    658                                     socket->key, socket->key_length, free);
     658                                    socket->key, socket->key_length);
    659659                        }
    660660                }
  • uspace/lib/net/tl/tl_common.c

    r3abfe9a8 reaf4c393  
    182182                        else
    183183                                packet_dimensions_exclude(packet_dimensions,
    184                                     DEVICE_INVALID_ID, free);
     184                                    DEVICE_INVALID_ID);
    185185                }
    186186        }
  • uspace/srv/devman/devman.c

    r3abfe9a8 reaf4c393  
    266266        }
    267267       
    268         ssize_t read_bytes = safe_read(fd, buf, len);
    269         if (read_bytes <= 0) {
     268        if (read(fd, buf, len) <= 0) {
    270269                printf(NAME ": unable to read file '%s'.\n", conf_path);
    271270                goto cleanup;
    272271        }
    273         buf[read_bytes] = 0;
     272        buf[len] = 0;
    274273       
    275274        suc = parse_match_ids(buf, ids);
     
    11241123fun_node_t *find_fun_node_by_path(dev_tree_t *tree, char *path)
    11251124{
    1126         assert(path != NULL);
    1127 
    1128         bool is_absolute = path[0] == '/';
    1129         if (!is_absolute) {
    1130                 return NULL;
    1131         }
    1132 
    11331125        fibril_rwlock_read_lock(&tree->rwlock);
    11341126       
     
    11401132        char *rel_path = path;
    11411133        char *next_path_elem = NULL;
    1142         bool cont = true;
     1134        bool cont = (rel_path[0] == '/');
    11431135       
    11441136        while (cont && fun != NULL) {
  • uspace/srv/devman/main.c

    r3abfe9a8 reaf4c393  
    477477                dev = fun->dev;
    478478
    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) {
     479        if (fun == NULL && dev == NULL) {
    486480                printf(NAME ": devman_forward error - no device or function with "
    487481                    "handle %" PRIun " was found.\n", handle);
  • uspace/srv/devman/util.c

    r3abfe9a8 reaf4c393  
    111111}
    112112
    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 
    140113/** @}
    141114 */
  • uspace/srv/devman/util.h

    r3abfe9a8 reaf4c393  
    4747extern void replace_char(char *, char, char);
    4848
    49 extern ssize_t safe_read(int, void *, size_t);
    50 
    5149#endif
    5250
  • uspace/srv/hw/netif/ne2000/dp8390.c

    r3abfe9a8 reaf4c393  
    391391       
    392392        if ((size < ETH_MIN_PACK_SIZE) || (size > ETH_MAX_PACK_SIZE_TAGGED)) {
    393                 fibril_mutex_unlock(&ne2k->sq_mutex);
    394393                fprintf(stderr, "%s: Frame dropped (invalid size %zu bytes)\n",
    395394                    NAME, size);
  • uspace/srv/net/il/arp/arp.c

    r3abfe9a8 reaf4c393  
    157157                       
    158158                        arp_clear_addr(&proto->addresses);
    159                         arp_addr_destroy(&proto->addresses, free);
    160                 }
    161         }
    162        
    163         arp_protos_clear(&device->protos, free);
     159                        arp_addr_destroy(&proto->addresses);
     160                }
     161        }
     162       
     163        arp_protos_clear(&device->protos);
    164164}
    165165
     
    184184        }
    185185       
    186         arp_cache_clear(&arp_globals.cache, free);
     186        arp_cache_clear(&arp_globals.cache);
    187187        fibril_mutex_unlock(&arp_globals.lock);
    188188       
     
    212212                arp_clear_trans(trans);
    213213       
    214         arp_addr_exclude(&proto->addresses, address->value, address->length, free);
     214        arp_addr_exclude(&proto->addresses, address->value, address->length);
    215215       
    216216        fibril_mutex_unlock(&arp_globals.lock);
     
    345345                            header->protocol_length, trans);
    346346                        if (rc != EOK) {
    347                                 free(trans);
     347                                /* The generic char map has already freed trans! */
    348348                                return rc;
    349349                        }
     
    556556                if (index < 0) {
    557557                        fibril_mutex_unlock(&arp_globals.lock);
    558                         arp_protos_destroy(&device->protos, free);
     558                        arp_protos_destroy(&device->protos);
    559559                        free(device);
    560560                        return index;
     
    569569                if (device->phone < 0) {
    570570                        fibril_mutex_unlock(&arp_globals.lock);
    571                         arp_protos_destroy(&device->protos, free);
     571                        arp_protos_destroy(&device->protos);
    572572                        free(device);
    573573                        return EREFUSED;
     
    579579                if (rc != EOK) {
    580580                        fibril_mutex_unlock(&arp_globals.lock);
    581                         arp_protos_destroy(&device->protos, free);
     581                        arp_protos_destroy(&device->protos);
    582582                        free(device);
    583583                        return rc;
     
    589589                if (rc != EOK) {
    590590                        fibril_mutex_unlock(&arp_globals.lock);
    591                         arp_protos_destroy(&device->protos, free);
     591                        arp_protos_destroy(&device->protos);
    592592                        free(device);
    593593                        return rc;
     
    601601                        free(device->addr);
    602602                        free(device->addr_data);
    603                         arp_protos_destroy(&device->protos, free);
     603                        arp_protos_destroy(&device->protos);
    604604                        free(device);
    605605                        return rc;
     
    614614                        free(device->broadcast_addr);
    615615                        free(device->broadcast_data);
    616                         arp_protos_destroy(&device->protos, free);
     616                        arp_protos_destroy(&device->protos);
    617617                        free(device);
    618618                        return rc;
     
    746746                        arp_clear_trans(trans);
    747747                        arp_addr_exclude(&proto->addresses, target->value,
    748                             target->length, free);
     748                            target->length);
    749749                        return EAGAIN;
    750750                }
     
    794794            trans);
    795795        if (rc != EOK) {
    796                 free(trans);
     796                /* The generic char map has already freed trans! */
    797797                return rc;
    798798        }
     
    807807                arp_clear_trans(trans);
    808808                arp_addr_exclude(&proto->addresses, target->value,
    809                     target->length, free);
     809                    target->length);
    810810                return ENOENT;
    811811        }
  • uspace/srv/net/il/ip/ip.c

    r3abfe9a8 reaf4c393  
    505505        if (rc != EOK) {
    506506                fibril_rwlock_write_unlock(&ip_globals.netifs_lock);
    507                 ip_routes_destroy(&ip_netif->routes, free);
     507                ip_routes_destroy(&ip_netif->routes);
    508508                free(ip_netif);
    509509                return rc;
  • uspace/srv/net/net/net.c

    r3abfe9a8 reaf4c393  
    555555                rc = read_netif_configuration(conf_files[i], netif);
    556556                if (rc != EOK) {
    557                         measured_strings_destroy(&netif->configuration, free);
     557                        measured_strings_destroy(&netif->configuration);
    558558                        free(netif);
    559559                        return rc;
     
    565565                if (!setting) {
    566566                        fprintf(stderr, "%s: Network interface name is missing\n", NAME);
    567                         measured_strings_destroy(&netif->configuration, free);
     567                        measured_strings_destroy(&netif->configuration);
    568568                        free(netif);
    569569                        return EINVAL;
     
    574574                int index = netifs_add(&net_globals.netifs, netif->id, netif);
    575575                if (index < 0) {
    576                         measured_strings_destroy(&netif->configuration, free);
     576                        measured_strings_destroy(&netif->configuration);
    577577                        free(netif);
    578578                        return index;
     
    586586                    index);
    587587                if (rc != EOK) {
    588                         measured_strings_destroy(&netif->configuration, free);
    589                         netifs_exclude_index(&net_globals.netifs, index, free);
     588                        measured_strings_destroy(&netif->configuration);
     589                        netifs_exclude_index(&net_globals.netifs, index);
    590590                        return rc;
    591591                }
     
    595595                        printf("%s: Ignoring failed interface %s (%s)\n", NAME,
    596596                            netif->name, str_error(rc));
    597                         measured_strings_destroy(&netif->configuration, free);
    598                         netifs_exclude_index(&net_globals.netifs, index, free);
     597                        measured_strings_destroy(&netif->configuration);
     598                        netifs_exclude_index(&net_globals.netifs, index);
    599599                        continue;
    600600                }
  • uspace/srv/net/nil/eth/eth.c

    r3abfe9a8 reaf4c393  
    214214        if (rc != EOK) {
    215215                free(eth_globals.broadcast_addr);
    216                 eth_devices_destroy(&eth_globals.devices, free);
     216                eth_devices_destroy(&eth_globals.devices);
    217217        }
    218218out:
  • uspace/srv/net/tl/tcp/tcp.c

    r3abfe9a8 reaf4c393  
    17071707                if (socket->port > 0) {
    17081708                        socket_ports_exclude(&tcp_globals.sockets,
    1709                             socket->port, free);
     1709                            socket->port);
    17101710                        socket->port = 0;
    17111711                }
     
    24922492        rc = packet_dimensions_initialize(&tcp_globals.dimensions);
    24932493        if (rc != EOK) {
    2494                 socket_ports_destroy(&tcp_globals.sockets, free);
     2494                socket_ports_destroy(&tcp_globals.sockets);
    24952495                goto out;
    24962496        }
  • uspace/srv/net/tl/udp/udp.c

    r3abfe9a8 reaf4c393  
    417417        rc = packet_dimensions_initialize(&udp_globals.dimensions);
    418418        if (rc != EOK) {
    419                 socket_ports_destroy(&udp_globals.sockets, free);
     419                socket_ports_destroy(&udp_globals.sockets);
    420420                fibril_rwlock_write_unlock(&udp_globals.lock);
    421421                return rc;
     
    434434            &data);
    435435        if (rc != EOK) {
    436                 socket_ports_destroy(&udp_globals.sockets, free);
     436                socket_ports_destroy(&udp_globals.sockets);
    437437                fibril_rwlock_write_unlock(&udp_globals.lock);
    438438                return rc;
Note: See TracChangeset for help on using the changeset viewer.