Changeset 5e801dc in mainline for uspace/srv


Ignore:
Timestamp:
2019-02-25T14:42:38Z (7 years ago)
Author:
GitHub <noreply@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a4e78743
Parents:
ee8d4d6
git-author:
Jiří Zárevúcky <zarevucky.jiri@…> (2019-02-25 14:42:38)
git-committer:
GitHub <noreply@…> (2019-02-25 14:42:38)
Message:

Indicate and enforce constness of hash table key in certain functions (#158)

The assumption here is that modifying key in the hash/equal functions in something completely unexpected, and not something you would ever want to do intentionally, so it makes sense to disallow it entirely to get that extra level of checking.

Location:
uspace/srv
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/devman/devtree.c

    ree8d4d6 r5e801dc  
    4242/* hash table operations */
    4343
    44 static inline size_t handle_key_hash(void *key)
    45 {
    46         devman_handle_t handle = *(devman_handle_t *)key;
    47         return handle;
     44static inline size_t handle_key_hash(const void *key)
     45{
     46        const devman_handle_t *handle = key;
     47        return *handle;
    4848}
    4949
     
    6060}
    6161
    62 static bool devman_devices_key_equal(void *key, const ht_link_t *item)
    63 {
    64         devman_handle_t handle = *(devman_handle_t *)key;
     62static bool devman_devices_key_equal(const void *key, const ht_link_t *item)
     63{
     64        const devman_handle_t *handle = key;
    6565        dev_node_t *dev = hash_table_get_inst(item, dev_node_t, devman_dev);
    66         return dev->handle == handle;
    67 }
    68 
    69 static bool devman_functions_key_equal(void *key, const ht_link_t *item)
    70 {
    71         devman_handle_t handle = *(devman_handle_t *)key;
     66        return dev->handle == *handle;
     67}
     68
     69static bool devman_functions_key_equal(const void *key, const ht_link_t *item)
     70{
     71        const devman_handle_t *handle = key;
    7272        fun_node_t *fun = hash_table_get_inst(item, fun_node_t, devman_fun);
    73         return fun->handle == handle;
    74 }
    75 
    76 static inline size_t service_id_key_hash(void *key)
    77 {
    78         service_id_t service_id = *(service_id_t *)key;
    79         return service_id;
     73        return fun->handle == *handle;
     74}
     75
     76static inline size_t service_id_key_hash(const void *key)
     77{
     78        const service_id_t *service_id = key;
     79        return *service_id;
    8080}
    8181
     
    8686}
    8787
    88 static bool loc_functions_key_equal(void *key, const ht_link_t *item)
    89 {
    90         service_id_t service_id = *(service_id_t *)key;
     88static bool loc_functions_key_equal(const void *key, const ht_link_t *item)
     89{
     90        const service_id_t *service_id = key;
    9191        fun_node_t *fun = hash_table_get_inst(item, fun_node_t, loc_fun);
    92         return fun->service_id == service_id;
     92        return fun->service_id == *service_id;
    9393}
    9494
  • uspace/srv/fs/cdfs/cdfs_ops.c

    ree8d4d6 r5e801dc  
    285285} ht_key_t;
    286286
    287 static size_t nodes_key_hash(void *k)
    288 {
    289         ht_key_t *key = (ht_key_t *)k;
     287static size_t nodes_key_hash(const void *k)
     288{
     289        const ht_key_t *key = k;
    290290        return hash_combine(key->service_id, key->index);
    291291}
     
    297297}
    298298
    299 static bool nodes_key_equal(void *k, const ht_link_t *item)
     299static bool nodes_key_equal(const void *k, const ht_link_t *item)
    300300{
    301301        cdfs_node_t *node = hash_table_get_inst(item, cdfs_node_t, nh_link);
    302         ht_key_t *key = (ht_key_t *)k;
     302        const ht_key_t *key = k;
    303303
    304304        return key->service_id == node->fs->service_id && key->index == node->index;
  • uspace/srv/fs/exfat/exfat_idx.c

    ree8d4d6 r5e801dc  
    117117} pos_key_t;
    118118
    119 static inline size_t pos_key_hash(void *key)
    120 {
    121         pos_key_t *pos = (pos_key_t *)key;
     119static inline size_t pos_key_hash(const void *key)
     120{
     121        const pos_key_t *pos = key;
    122122
    123123        size_t hash = 0;
     
    139139}
    140140
    141 static bool pos_key_equal(void *key, const ht_link_t *item)
    142 {
    143         pos_key_t *pos = (pos_key_t *)key;
     141static bool pos_key_equal(const void *key, const ht_link_t *item)
     142{
     143        const pos_key_t *pos = key;
    144144        exfat_idx_t *fidx = hash_table_get_inst(item, exfat_idx_t, uph_link);
    145145
     
    168168} idx_key_t;
    169169
    170 static size_t idx_key_hash(void *key_arg)
    171 {
    172         idx_key_t *key = (idx_key_t *)key_arg;
     170static size_t idx_key_hash(const void *key_arg)
     171{
     172        const idx_key_t *key = key_arg;
    173173        return hash_combine(key->service_id, key->index);
    174174}
     
    180180}
    181181
    182 static bool idx_key_equal(void *key_arg, const ht_link_t *item)
     182static bool idx_key_equal(const void *key_arg, const ht_link_t *item)
    183183{
    184184        exfat_idx_t *fidx = hash_table_get_inst(item, exfat_idx_t, uih_link);
    185         idx_key_t *key = (idx_key_t *)key_arg;
     185        const idx_key_t *key = key_arg;
    186186
    187187        return key->index == fidx->index && key->service_id == fidx->service_id;
  • uspace/srv/fs/fat/fat_idx.c

    ree8d4d6 r5e801dc  
    117117} pos_key_t;
    118118
    119 static inline size_t pos_key_hash(void *key)
    120 {
    121         pos_key_t *pos = (pos_key_t *)key;
     119static inline size_t pos_key_hash(const void *key)
     120{
     121        const pos_key_t *pos = key;
    122122
    123123        size_t hash = 0;
     
    139139}
    140140
    141 static bool pos_key_equal(void *key, const ht_link_t *item)
    142 {
    143         pos_key_t *pos = (pos_key_t *)key;
     141static bool pos_key_equal(const void *key, const ht_link_t *item)
     142{
     143        const pos_key_t *pos = key;
    144144        fat_idx_t *fidx = hash_table_get_inst(item, fat_idx_t, uph_link);
    145145
     
    168168} idx_key_t;
    169169
    170 static size_t idx_key_hash(void *key_arg)
    171 {
    172         idx_key_t *key = (idx_key_t *)key_arg;
     170static size_t idx_key_hash(const void *key_arg)
     171{
     172        const idx_key_t *key = key_arg;
    173173        return hash_combine(key->service_id, key->index);
    174174}
     
    180180}
    181181
    182 static bool idx_key_equal(void *key_arg, const ht_link_t *item)
     182static bool idx_key_equal(const void *key_arg, const ht_link_t *item)
    183183{
    184184        fat_idx_t *fidx = hash_table_get_inst(item, fat_idx_t, uih_link);
    185         idx_key_t *key = (idx_key_t *)key_arg;
     185        const idx_key_t *key = key_arg;
    186186
    187187        return key->index == fidx->index && key->service_id == fidx->service_id;
  • uspace/srv/fs/locfs/locfs_ops.c

    ree8d4d6 r5e801dc  
    7171/* Implementation of hash table interface for the nodes hash table. */
    7272
    73 static size_t services_key_hash(void *key)
    74 {
    75         return *(service_id_t *)key;
     73static size_t services_key_hash(const void *key)
     74{
     75        const service_id_t *k = key;
     76        return *k;
    7677}
    7778
     
    8283}
    8384
    84 static bool services_key_equal(void *key, const ht_link_t *item)
    85 {
     85static bool services_key_equal(const void *key, const ht_link_t *item)
     86{
     87        const service_id_t *k = key;
    8688        service_t *dev = hash_table_get_inst(item, service_t, link);
    87         return (dev->service_id == *(service_id_t *)key);
     89        return (dev->service_id == *k);
    8890}
    8991
  • uspace/srv/fs/mfs/mfs_ops.c

    ree8d4d6 r5e801dc  
    100100
    101101static size_t
    102 open_nodes_key_hash(void *key)
    103 {
    104         node_key_t *node_key = (node_key_t *)key;
     102open_nodes_key_hash(const void *key)
     103{
     104        const node_key_t *node_key = key;
    105105        return hash_combine(node_key->service_id, node_key->index);
    106106}
     
    114114
    115115static bool
    116 open_nodes_key_equal(void *key, const ht_link_t *item)
    117 {
    118         node_key_t *node_key = (node_key_t *)key;
     116open_nodes_key_equal(const void *key, const ht_link_t *item)
     117{
     118        const node_key_t *node_key = key;
    119119        struct mfs_node *mnode = hash_table_get_inst(item, struct mfs_node, link);
    120120
  • uspace/srv/fs/tmpfs/tmpfs_ops.c

    ree8d4d6 r5e801dc  
    147147} node_key_t;
    148148
    149 static size_t nodes_key_hash(void *k)
    150 {
    151         node_key_t *key = (node_key_t *)k;
     149static size_t nodes_key_hash(const void *k)
     150{
     151        const node_key_t *key = k;
    152152        return hash_combine(key->service_id, key->index);
    153153}
     
    159159}
    160160
    161 static bool nodes_key_equal(void *key_arg, const ht_link_t *item)
     161static bool nodes_key_equal(const void *key_arg, const ht_link_t *item)
    162162{
    163163        tmpfs_node_t *node = hash_table_get_inst(item, tmpfs_node_t, nh_link);
    164         node_key_t *key = (node_key_t *)key_arg;
     164        const node_key_t *key = key_arg;
    165165
    166166        return key->service_id == node->service_id && key->index == node->index;
  • uspace/srv/fs/udf/udf_idx.c

    ree8d4d6 r5e801dc  
    6363}
    6464
    65 static size_t udf_idx_key_hash(void *k)
    66 {
    67         udf_ht_key_t *key = (udf_ht_key_t *) k;
     65static size_t udf_idx_key_hash(const void *k)
     66{
     67        const udf_ht_key_t *key = k;
    6868        return hash_combine(key->service_id, key->index);
    6969}
    7070
    71 static bool udf_idx_key_equal(void *k, const ht_link_t *item)
    72 {
    73         udf_ht_key_t *key = (udf_ht_key_t *) k;
     71static bool udf_idx_key_equal(const void *k, const ht_link_t *item)
     72{
     73        const udf_ht_key_t *key = k;
    7474        udf_node_t *node = hash_table_get_inst(item, udf_node_t, link);
    7575
  • uspace/srv/hid/input/gsp.c

    ree8d4d6 r5e801dc  
    6464} trans_key_t;
    6565
    66 static size_t trans_key_hash(void *key)
    67 {
    68         trans_key_t *trans_key = (trans_key_t *)key;
     66static size_t trans_key_hash(const void *key)
     67{
     68        const trans_key_t *trans_key = key;
    6969        return hash_combine(trans_key->input, trans_key->old_state);
    7070}
     
    7676}
    7777
    78 static bool trans_key_equal(void *key, const ht_link_t *item)
    79 {
    80         trans_key_t *trans_key = (trans_key_t *)key;
     78static bool trans_key_equal(const void *key, const ht_link_t *item)
     79{
     80        const trans_key_t *trans_key = key;
    8181        gsp_trans_t *t = hash_table_get_inst(item, gsp_trans_t, link);
    8282
  • uspace/srv/ns/service.c

    ree8d4d6 r5e801dc  
    6565} hashed_iface_t;
    6666
    67 static size_t service_key_hash(void *key)
    68 {
    69         return *(service_t *) key;
     67static size_t service_key_hash(const void *key)
     68{
     69        const service_t *srv = key;
     70        return *srv;
    7071}
    7172
     
    7879}
    7980
    80 static bool service_key_equal(void *key, const ht_link_t *item)
    81 {
     81static bool service_key_equal(const void *key, const ht_link_t *item)
     82{
     83        const service_t *srv = key;
    8284        hashed_service_t *service =
    8385            hash_table_get_inst(item, hashed_service_t, link);
    8486
    85         return service->service == *(service_t *) key;
    86 }
    87 
    88 static size_t iface_key_hash(void *key)
    89 {
    90         return *(iface_t *) key;
     87        return service->service == *srv;
     88}
     89
     90static size_t iface_key_hash(const void *key)
     91{
     92        const iface_t *iface = key;
     93        return *iface;
    9194}
    9295
     
    99102}
    100103
    101 static bool iface_key_equal(void *key, const ht_link_t *item)
    102 {
     104static bool iface_key_equal(const void *key, const ht_link_t *item)
     105{
     106        const iface_t *kiface = key;
    103107        hashed_iface_t *iface =
    104108            hash_table_get_inst(item, hashed_iface_t, link);
    105109
    106         return iface->iface == *(iface_t *) key;
     110        return iface->iface == *kiface;
    107111}
    108112
  • uspace/srv/ns/task.c

    ree8d4d6 r5e801dc  
    5454} hashed_task_t;
    5555
    56 static size_t task_key_hash(void *key)
    57 {
    58         return *(task_id_t *)key;
    59 }
    60 
    61 static size_t task_hash(const ht_link_t  *item)
     56static size_t task_key_hash(const void *key)
     57{
     58        const task_id_t *tid = key;
     59        return *tid;
     60}
     61
     62static size_t task_hash(const ht_link_t *item)
    6263{
    6364        hashed_task_t *ht = hash_table_get_inst(item, hashed_task_t, link);
     
    6566}
    6667
    67 static bool task_key_equal(void *key, const ht_link_t *item)
    68 {
     68static bool task_key_equal(const void *key, const ht_link_t *item)
     69{
     70        const task_id_t *tid = key;
    6971        hashed_task_t *ht = hash_table_get_inst(item, hashed_task_t, link);
    70         return ht->id == *(task_id_t *)key;
     72        return ht->id == *tid;
    7173}
    7274
     
    9799/* label-to-id hash table operations */
    98100
    99 static size_t p2i_key_hash(void *key)
    100 {
    101         sysarg_t label = *(sysarg_t *)key;
    102         return label;
     101static size_t p2i_key_hash(const void *key)
     102{
     103        const sysarg_t *label = key;
     104        return *label;
    103105}
    104106
     
    109111}
    110112
    111 static bool p2i_key_equal(void *key, const ht_link_t *item)
    112 {
    113         sysarg_t label = *(sysarg_t *)key;
     113static bool p2i_key_equal(const void *key, const ht_link_t *item)
     114{
     115        const sysarg_t *label = key;
    114116        p2i_entry_t *entry = hash_table_get_inst(item, p2i_entry_t, link);
    115117
    116         return (label == entry->label);
     118        return (*label == entry->label);
    117119}
    118120
  • uspace/srv/vfs/vfs_node.c

    ree8d4d6 r5e801dc  
    6060#define KEY_INDEX       2
    6161
    62 static size_t nodes_key_hash(void *);
     62static size_t nodes_key_hash(const void *);
    6363static size_t nodes_hash(const ht_link_t *);
    64 static bool nodes_key_equal(void *, const ht_link_t *);
     64static bool nodes_key_equal(const void *, const ht_link_t *);
    6565static vfs_triplet_t node_triplet(vfs_node_t *node);
    6666
     
    280280}
    281281
    282 static size_t nodes_key_hash(void *key)
    283 {
    284         vfs_triplet_t *tri = key;
     282static size_t nodes_key_hash(const void *key)
     283{
     284        const vfs_triplet_t *tri = key;
    285285        size_t hash = hash_combine(tri->fs_handle, tri->index);
    286286        return hash_combine(hash, tri->service_id);
     
    294294}
    295295
    296 static bool nodes_key_equal(void *key, const ht_link_t *item)
    297 {
    298         vfs_triplet_t *tri = key;
     296static bool nodes_key_equal(const void *key, const ht_link_t *item)
     297{
     298        const vfs_triplet_t *tri = key;
    299299        vfs_node_t *node = hash_table_get_inst(item, vfs_node_t, nh_link);
    300300        return node->fs_handle == tri->fs_handle &&
Note: See TracChangeset for help on using the changeset viewer.