version 1.21, 2016/05/01 10:34:30 |
version 1.22, 2016/05/01 10:56:03 |
|
|
case MAGIC_TYPE_NONE: |
case MAGIC_TYPE_NONE: |
case MAGIC_TYPE_BESTRING16: |
case MAGIC_TYPE_BESTRING16: |
case MAGIC_TYPE_LESTRING16: |
case MAGIC_TYPE_LESTRING16: |
|
case MAGIC_TYPE_NAME: |
|
case MAGIC_TYPE_USE: |
return (0); /* don't use result */ |
return (0); /* don't use result */ |
case MAGIC_TYPE_BYTE: |
case MAGIC_TYPE_BYTE: |
case MAGIC_TYPE_UBYTE: |
case MAGIC_TYPE_UBYTE: |
|
|
case MAGIC_TYPE_DEFAULT: |
case MAGIC_TYPE_DEFAULT: |
return (0); |
return (0); |
case MAGIC_TYPE_CLEAR: |
case MAGIC_TYPE_CLEAR: |
|
case MAGIC_TYPE_NAME: |
|
case MAGIC_TYPE_USE: |
break; |
break; |
case MAGIC_TYPE_BYTE: |
case MAGIC_TYPE_BYTE: |
case MAGIC_TYPE_UBYTE: |
case MAGIC_TYPE_UBYTE: |
|
|
ml->type_operator = ' '; |
ml->type_operator = ' '; |
ml->type_operand = 0; |
ml->type_operand = 0; |
|
|
|
if (strncmp(s, "name", (sizeof "name") - 1) == 0) { |
|
ml->type = MAGIC_TYPE_NAME; |
|
ml->type_string = xstrdup(s); |
|
goto done; |
|
} |
|
if (strncmp(s, "use", (sizeof "use") - 1) == 0) { |
|
ml->type = MAGIC_TYPE_USE; |
|
ml->type_string = xstrdup(s); |
|
goto done; |
|
} |
|
|
if (strncmp(s, "string", (sizeof "string") - 1) == 0 || |
if (strncmp(s, "string", (sizeof "string") - 1) == 0 || |
strncmp(s, "ustring", (sizeof "ustring") - 1) == 0) { |
strncmp(s, "ustring", (sizeof "ustring") - 1) == 0) { |
if (*s == 'u') |
if (*s == 'u') |
|
|
} |
} |
|
|
switch (ml->type) { |
switch (ml->type) { |
|
case MAGIC_TYPE_NAME: |
|
case MAGIC_TYPE_USE: |
|
copy = s = xmalloc(strlen(*line) + 1); |
|
if (magic_get_string(line, s, &slen) != 0 || slen == 0) { |
|
magic_warn(ml, "can't parse string"); |
|
goto fail; |
|
} |
|
if (slen == 0 || *s == '\0' || strcmp(s, "^") == 0) { |
|
magic_warn(ml, "invalid name"); |
|
goto fail; |
|
} |
|
ml->name = s; |
|
return (0); /* do not free */ |
case MAGIC_TYPE_STRING: |
case MAGIC_TYPE_STRING: |
case MAGIC_TYPE_PSTRING: |
case MAGIC_TYPE_PSTRING: |
case MAGIC_TYPE_SEARCH: |
case MAGIC_TYPE_SEARCH: |
|
|
} |
} |
RB_GENERATE(magic_tree, magic_line, node, magic_compare); |
RB_GENERATE(magic_tree, magic_line, node, magic_compare); |
|
|
|
int |
|
magic_named_compare(struct magic_line *ml1, struct magic_line *ml2) |
|
{ |
|
return (strcmp(ml1->name, ml2->name)); |
|
} |
|
RB_GENERATE(magic_named_tree, magic_line, node, magic_named_compare); |
|
|
static void |
static void |
magic_adjust_strength(struct magic *m, u_int at, struct magic_line *ml, |
magic_adjust_strength(struct magic *m, u_int at, struct magic_line *ml, |
char *line) |
char *line) |
|
|
} |
} |
|
|
ml->strength = magic_get_strength(ml); |
ml->strength = magic_get_strength(ml); |
if (ml->parent == NULL) |
if (ml->parent == NULL) { |
RB_INSERT(magic_tree, &m->tree, ml); |
if (ml->name != NULL) |
else |
RB_INSERT(magic_named_tree, &m->named, ml); |
|
else |
|
RB_INSERT(magic_tree, &m->tree, ml); |
|
} else |
TAILQ_INSERT_TAIL(&ml->parent->children, ml, entry); |
TAILQ_INSERT_TAIL(&ml->parent->children, ml, entry); |
parent0 = ml; |
parent0 = ml; |
} |
} |