| File: | epan/dfilter/sttype-op.c |
| Warning: | line 74, column 14 Value stored to 's' during its initialization is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | /* |
| 2 | * Wireshark - Network traffic analyzer |
| 3 | * By Gerald Combs <gerald@wireshark.org> |
| 4 | * Copyright 2001 Gerald Combs |
| 5 | * |
| 6 | * |
| 7 | * SPDX-License-Identifier: GPL-2.0-or-later |
| 8 | */ |
| 9 | |
| 10 | #include "syntax-tree.h" |
| 11 | #include "sttype-op.h" |
| 12 | |
| 13 | typedef struct { |
| 14 | uint32_t magic; |
| 15 | stnode_op_t op; |
| 16 | stmatch_t how; |
| 17 | stnode_t *val1; |
| 18 | stnode_t *val2; |
| 19 | } oper_t; |
| 20 | |
| 21 | #define OPER_MAGIC0xab9009ba 0xab9009ba |
| 22 | |
| 23 | static void * |
| 24 | oper_new(void *junk _U___attribute__((unused))) |
| 25 | { |
| 26 | oper_t *oper; |
| 27 | |
| 28 | ws_assert(junk == NULL)do { if ((1) && !(junk == ((void*)0))) ws_log_fatal_full ("", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c", 28, __func__ , "assertion failed: %s", "junk == ((void*)0)"); } while (0); |
| 29 | |
| 30 | oper = g_new(oper_t, 1)((oper_t *) g_malloc_n ((1), sizeof (oper_t))); |
| 31 | |
| 32 | oper->magic = OPER_MAGIC0xab9009ba; |
| 33 | oper->op = STNODE_OP_UNINITIALIZED; |
| 34 | oper->how = STNODE_MATCH_DEF; |
| 35 | oper->val1 = NULL((void*)0); |
| 36 | oper->val2 = NULL((void*)0); |
| 37 | |
| 38 | return oper; |
| 39 | } |
| 40 | |
| 41 | static void * |
| 42 | oper_dup(const void *data) |
| 43 | { |
| 44 | const oper_t *org = data; |
| 45 | oper_t *oper; |
| 46 | |
| 47 | oper = oper_new(NULL((void*)0)); |
| 48 | oper->op = org->op; |
| 49 | oper->how = org->how; |
| 50 | oper->val1 = stnode_dup(org->val1); |
| 51 | if (org->val2) |
| 52 | oper->val2 = stnode_dup(org->val2); |
| 53 | |
| 54 | return oper; |
| 55 | } |
| 56 | |
| 57 | static void |
| 58 | oper_free(void *value) |
| 59 | { |
| 60 | oper_t *oper = value; |
| 61 | ws_assert_magic(oper, OPER_MAGIC)do { do { if ((1) && !(oper)) ws_log_fatal_full("", LOG_LEVEL_ERROR , "epan/dfilter/sttype-op.c", 61, __func__, "assertion failed: %s" , "oper"); } while (0); if ((oper)->magic != (0xab9009ba)) { ws_log_full("DFilter", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 61, __func__, "Magic num is 0x%08" "x"", " "but should be 0x%08" "x", (oper)->magic, (0xab9009ba)); } } while(0); |
| 62 | |
| 63 | if (oper->val1) |
| 64 | stnode_free(oper->val1); |
| 65 | if (oper->val2) |
| 66 | stnode_free(oper->val2); |
| 67 | |
| 68 | g_free(oper); |
| 69 | } |
| 70 | |
| 71 | static char * |
| 72 | oper_todisplay(const oper_t *oper) |
| 73 | { |
| 74 | const char *s = "(notset)"; |
Value stored to 's' during its initialization is never read | |
| 75 | |
| 76 | switch(oper->op) { |
| 77 | case STNODE_OP_NOT: |
| 78 | s = "!"; |
| 79 | break; |
| 80 | case STNODE_OP_AND: |
| 81 | s = "&&"; |
| 82 | break; |
| 83 | case STNODE_OP_OR: |
| 84 | s = "||"; |
| 85 | break; |
| 86 | case STNODE_OP_ALL_EQ: |
| 87 | s = "==="; |
| 88 | break; |
| 89 | case STNODE_OP_ANY_EQ: |
| 90 | s = "=="; |
| 91 | break; |
| 92 | case STNODE_OP_ALL_NE: |
| 93 | s = "!="; |
| 94 | break; |
| 95 | case STNODE_OP_ANY_NE: |
| 96 | s = "~="; |
| 97 | break; |
| 98 | case STNODE_OP_GT: |
| 99 | s = ">"; |
| 100 | break; |
| 101 | case STNODE_OP_GE: |
| 102 | s = ">="; |
| 103 | break; |
| 104 | case STNODE_OP_LT: |
| 105 | s = "<"; |
| 106 | break; |
| 107 | case STNODE_OP_LE: |
| 108 | s = "<="; |
| 109 | break; |
| 110 | case STNODE_OP_BITWISE_AND: |
| 111 | s = "&"; |
| 112 | break; |
| 113 | case STNODE_OP_ADD: |
| 114 | s = "+"; |
| 115 | break; |
| 116 | case STNODE_OP_UNARY_MINUS: |
| 117 | case STNODE_OP_SUBTRACT: |
| 118 | s = "-"; |
| 119 | break; |
| 120 | case STNODE_OP_MULTIPLY: |
| 121 | s = "*"; |
| 122 | break; |
| 123 | case STNODE_OP_DIVIDE: |
| 124 | s = "/"; |
| 125 | break; |
| 126 | case STNODE_OP_MODULO: |
| 127 | s = "%"; |
| 128 | break; |
| 129 | case STNODE_OP_CONTAINS: |
| 130 | s = "contains"; |
| 131 | break; |
| 132 | case STNODE_OP_MATCHES: |
| 133 | s = "matches"; |
| 134 | break; |
| 135 | case STNODE_OP_IN: |
| 136 | s = "in"; |
| 137 | break; |
| 138 | case STNODE_OP_NOT_IN: |
| 139 | s = "not in"; |
| 140 | break; |
| 141 | case STNODE_OP_UNINITIALIZED: |
| 142 | s = "(uninitialized)"; |
| 143 | break; |
| 144 | } |
| 145 | return g_strdup(s)g_strdup_inline (s); |
| 146 | } |
| 147 | |
| 148 | static char * |
| 149 | oper_todebug(const oper_t *oper) |
| 150 | { |
| 151 | const char *s = stnode_op_name(oper->op); |
| 152 | if (oper->how == STNODE_MATCH_ALL) |
| 153 | return ws_strdup_printf("ALL %s", s)wmem_strdup_printf(((void*)0), "ALL %s", s); |
| 154 | if (oper->how == STNODE_MATCH_ANY) |
| 155 | return ws_strdup_printf("ANY %s", s)wmem_strdup_printf(((void*)0), "ANY %s", s); |
| 156 | return ws_strdup(s)wmem_strdup(((void*)0), s); |
| 157 | } |
| 158 | |
| 159 | static char * |
| 160 | oper_tostr(const void *value, bool_Bool pretty) |
| 161 | { |
| 162 | const oper_t *oper = value; |
| 163 | ws_assert_magic(oper, OPER_MAGIC)do { do { if ((1) && !(oper)) ws_log_fatal_full("", LOG_LEVEL_ERROR , "epan/dfilter/sttype-op.c", 163, __func__, "assertion failed: %s" , "oper"); } while (0); if ((oper)->magic != (0xab9009ba)) { ws_log_full("DFilter", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 163, __func__, "Magic num is 0x%08" "x"", " "but should be 0x%08" "x", (oper)->magic, (0xab9009ba)); } } while(0); |
| 164 | |
| 165 | if (pretty) |
| 166 | return oper_todisplay(oper); |
| 167 | return oper_todebug(oper); |
| 168 | } |
| 169 | |
| 170 | static int |
| 171 | num_operands(stnode_op_t op) |
| 172 | { |
| 173 | switch(op) { |
| 174 | case STNODE_OP_NOT: |
| 175 | case STNODE_OP_UNARY_MINUS: |
| 176 | return 1; |
| 177 | case STNODE_OP_AND: |
| 178 | case STNODE_OP_OR: |
| 179 | case STNODE_OP_ALL_EQ: |
| 180 | case STNODE_OP_ANY_EQ: |
| 181 | case STNODE_OP_ALL_NE: |
| 182 | case STNODE_OP_ANY_NE: |
| 183 | case STNODE_OP_GT: |
| 184 | case STNODE_OP_GE: |
| 185 | case STNODE_OP_LT: |
| 186 | case STNODE_OP_LE: |
| 187 | case STNODE_OP_BITWISE_AND: |
| 188 | case STNODE_OP_ADD: |
| 189 | case STNODE_OP_SUBTRACT: |
| 190 | case STNODE_OP_MULTIPLY: |
| 191 | case STNODE_OP_DIVIDE: |
| 192 | case STNODE_OP_MODULO: |
| 193 | case STNODE_OP_CONTAINS: |
| 194 | case STNODE_OP_MATCHES: |
| 195 | case STNODE_OP_IN: |
| 196 | case STNODE_OP_NOT_IN: |
| 197 | return 2; |
| 198 | case STNODE_OP_UNINITIALIZED: |
| 199 | ASSERT_STNODE_OP_NOT_REACHED(op)ws_log_fatal_full("", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 199, __func__, "Invalid stnode op '%s'.", stnode_op_name(op )); |
| 200 | } |
| 201 | |
| 202 | ws_assert_not_reached()ws_log_fatal_full("", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 202, __func__, "assertion \"not reached\" failed"); |
| 203 | } |
| 204 | |
| 205 | |
| 206 | void |
| 207 | sttype_oper_set1(stnode_t *node, stnode_op_t op, stnode_t *val1) |
| 208 | { |
| 209 | oper_t *oper = stnode_data(node); |
| 210 | ws_assert_magic(oper, OPER_MAGIC)do { do { if ((1) && !(oper)) ws_log_fatal_full("", LOG_LEVEL_ERROR , "epan/dfilter/sttype-op.c", 210, __func__, "assertion failed: %s" , "oper"); } while (0); if ((oper)->magic != (0xab9009ba)) { ws_log_full("DFilter", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 210, __func__, "Magic num is 0x%08" "x"", " "but should be 0x%08" "x", (oper)->magic, (0xab9009ba)); } } while(0); |
| 211 | |
| 212 | ws_assert(num_operands(op) == 1)do { if ((1) && !(num_operands(op) == 1)) ws_log_fatal_full ("", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c", 212, __func__ , "assertion failed: %s", "num_operands(op) == 1"); } while ( 0); |
| 213 | oper->op = op; |
| 214 | oper->val1 = val1; |
| 215 | oper->val2 = NULL((void*)0); |
| 216 | } |
| 217 | |
| 218 | void |
| 219 | sttype_oper_set2(stnode_t *node, stnode_op_t op, stnode_t *val1, stnode_t *val2) |
| 220 | { |
| 221 | oper_t *oper = stnode_data(node); |
| 222 | ws_assert_magic(oper, OPER_MAGIC)do { do { if ((1) && !(oper)) ws_log_fatal_full("", LOG_LEVEL_ERROR , "epan/dfilter/sttype-op.c", 222, __func__, "assertion failed: %s" , "oper"); } while (0); if ((oper)->magic != (0xab9009ba)) { ws_log_full("DFilter", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 222, __func__, "Magic num is 0x%08" "x"", " "but should be 0x%08" "x", (oper)->magic, (0xab9009ba)); } } while(0); |
| 223 | |
| 224 | ws_assert(num_operands(op) == 2)do { if ((1) && !(num_operands(op) == 2)) ws_log_fatal_full ("", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c", 224, __func__ , "assertion failed: %s", "num_operands(op) == 2"); } while ( 0); |
| 225 | oper->op = op; |
| 226 | oper->val1 = val1; |
| 227 | oper->val2 = val2; |
| 228 | } |
| 229 | |
| 230 | void |
| 231 | sttype_oper_set1_args(stnode_t *node, stnode_t *val1) |
| 232 | { |
| 233 | oper_t *oper; |
| 234 | |
| 235 | oper = (oper_t*)stnode_data(node); |
| 236 | ws_assert_magic(oper, OPER_MAGIC)do { do { if ((1) && !(oper)) ws_log_fatal_full("", LOG_LEVEL_ERROR , "epan/dfilter/sttype-op.c", 236, __func__, "assertion failed: %s" , "oper"); } while (0); if ((oper)->magic != (0xab9009ba)) { ws_log_full("DFilter", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 236, __func__, "Magic num is 0x%08" "x"", " "but should be 0x%08" "x", (oper)->magic, (0xab9009ba)); } } while(0); |
| 237 | |
| 238 | ws_assert(num_operands(oper->op) == 1)do { if ((1) && !(num_operands(oper->op) == 1)) ws_log_fatal_full ("", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c", 238, __func__ , "assertion failed: %s", "num_operands(oper->op) == 1"); } while (0); |
| 239 | oper->val1 = val1; |
| 240 | oper->val2 = NULL((void*)0); |
| 241 | } |
| 242 | |
| 243 | void |
| 244 | sttype_oper_set2_args(stnode_t *node, stnode_t *val1, stnode_t *val2) |
| 245 | { |
| 246 | oper_t *oper; |
| 247 | |
| 248 | oper = (oper_t*)stnode_data(node); |
| 249 | ws_assert_magic(oper, OPER_MAGIC)do { do { if ((1) && !(oper)) ws_log_fatal_full("", LOG_LEVEL_ERROR , "epan/dfilter/sttype-op.c", 249, __func__, "assertion failed: %s" , "oper"); } while (0); if ((oper)->magic != (0xab9009ba)) { ws_log_full("DFilter", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 249, __func__, "Magic num is 0x%08" "x"", " "but should be 0x%08" "x", (oper)->magic, (0xab9009ba)); } } while(0); |
| 250 | |
| 251 | ws_assert(num_operands(oper->op) == 2)do { if ((1) && !(num_operands(oper->op) == 2)) ws_log_fatal_full ("", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c", 251, __func__ , "assertion failed: %s", "num_operands(oper->op) == 2"); } while (0); |
| 252 | oper->val1 = val1; |
| 253 | oper->val2 = val2; |
| 254 | } |
| 255 | |
| 256 | void |
| 257 | sttype_oper_set_op(stnode_t *node, stnode_op_t op) |
| 258 | { |
| 259 | oper_t *oper = stnode_data(node); |
| 260 | ws_assert_magic(oper, OPER_MAGIC)do { do { if ((1) && !(oper)) ws_log_fatal_full("", LOG_LEVEL_ERROR , "epan/dfilter/sttype-op.c", 260, __func__, "assertion failed: %s" , "oper"); } while (0); if ((oper)->magic != (0xab9009ba)) { ws_log_full("DFilter", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 260, __func__, "Magic num is 0x%08" "x"", " "but should be 0x%08" "x", (oper)->magic, (0xab9009ba)); } } while(0); |
| 261 | ws_assert(oper->op == STNODE_OP_UNINITIALIZED)do { if ((1) && !(oper->op == STNODE_OP_UNINITIALIZED )) ws_log_fatal_full("", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 261, __func__, "assertion failed: %s", "oper->op == STNODE_OP_UNINITIALIZED" ); } while (0); |
| 262 | oper->op = op; |
| 263 | } |
| 264 | |
| 265 | stnode_op_t |
| 266 | sttype_oper_get_op(stnode_t *node) |
| 267 | { |
| 268 | oper_t *oper = stnode_data(node); |
| 269 | ws_assert_magic(oper, OPER_MAGIC)do { do { if ((1) && !(oper)) ws_log_fatal_full("", LOG_LEVEL_ERROR , "epan/dfilter/sttype-op.c", 269, __func__, "assertion failed: %s" , "oper"); } while (0); if ((oper)->magic != (0xab9009ba)) { ws_log_full("DFilter", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 269, __func__, "Magic num is 0x%08" "x"", " "but should be 0x%08" "x", (oper)->magic, (0xab9009ba)); } } while(0); |
| 270 | return oper->op; |
| 271 | } |
| 272 | |
| 273 | void |
| 274 | sttype_oper_get(stnode_t *node, stnode_op_t *p_op, stnode_t **p_val1, stnode_t **p_val2) |
| 275 | { |
| 276 | oper_t *oper = stnode_data(node); |
| 277 | ws_assert_magic(oper, OPER_MAGIC)do { do { if ((1) && !(oper)) ws_log_fatal_full("", LOG_LEVEL_ERROR , "epan/dfilter/sttype-op.c", 277, __func__, "assertion failed: %s" , "oper"); } while (0); if ((oper)->magic != (0xab9009ba)) { ws_log_full("DFilter", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 277, __func__, "Magic num is 0x%08" "x"", " "but should be 0x%08" "x", (oper)->magic, (0xab9009ba)); } } while(0); |
| 278 | |
| 279 | if (p_op) |
| 280 | *p_op = oper->op; |
| 281 | if (p_val1) |
| 282 | *p_val1 = oper->val1; |
| 283 | if (p_val2) |
| 284 | *p_val2 = oper->val2; |
| 285 | } |
| 286 | |
| 287 | void |
| 288 | sttype_test_set_match(stnode_t *node, stmatch_t how) |
| 289 | { |
| 290 | oper_t *oper = stnode_data(node); |
| 291 | ws_assert_magic(oper, OPER_MAGIC)do { do { if ((1) && !(oper)) ws_log_fatal_full("", LOG_LEVEL_ERROR , "epan/dfilter/sttype-op.c", 291, __func__, "assertion failed: %s" , "oper"); } while (0); if ((oper)->magic != (0xab9009ba)) { ws_log_full("DFilter", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 291, __func__, "Magic num is 0x%08" "x"", " "but should be 0x%08" "x", (oper)->magic, (0xab9009ba)); } } while(0); |
| 292 | oper->how = how; |
| 293 | } |
| 294 | |
| 295 | stmatch_t |
| 296 | sttype_test_get_match(stnode_t *node) |
| 297 | { |
| 298 | oper_t *oper = stnode_data(node); |
| 299 | ws_assert_magic(oper, OPER_MAGIC)do { do { if ((1) && !(oper)) ws_log_fatal_full("", LOG_LEVEL_ERROR , "epan/dfilter/sttype-op.c", 299, __func__, "assertion failed: %s" , "oper"); } while (0); if ((oper)->magic != (0xab9009ba)) { ws_log_full("DFilter", LOG_LEVEL_ERROR, "epan/dfilter/sttype-op.c" , 299, __func__, "Magic num is 0x%08" "x"", " "but should be 0x%08" "x", (oper)->magic, (0xab9009ba)); } } while(0); |
| 300 | return oper->how; |
| 301 | } |
| 302 | |
| 303 | void |
| 304 | sttype_register_opers(void) |
| 305 | { |
| 306 | static sttype_t test_type = { |
| 307 | STTYPE_TEST, |
| 308 | oper_new, |
| 309 | oper_free, |
| 310 | oper_dup, |
| 311 | oper_tostr |
| 312 | }; |
| 313 | static sttype_t arithmetic_type = { |
| 314 | STTYPE_ARITHMETIC, |
| 315 | oper_new, |
| 316 | oper_free, |
| 317 | oper_dup, |
| 318 | oper_tostr |
| 319 | }; |
| 320 | |
| 321 | sttype_register(&test_type); |
| 322 | sttype_register(&arithmetic_type); |
| 323 | } |
| 324 | |
| 325 | /* |
| 326 | * Editor modelines - https://www.wireshark.org/tools/modelines.html |
| 327 | * |
| 328 | * Local variables: |
| 329 | * c-basic-offset: 8 |
| 330 | * tab-width: 8 |
| 331 | * indent-tabs-mode: t |
| 332 | * End: |
| 333 | * |
| 334 | * vi: set shiftwidth=8 tabstop=8 noexpandtab: |
| 335 | * :indentSize=8:tabSize=8:noTabs=false: |
| 336 | */ |