diff options
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/operand-int.h | 7 | ||||
-rw-r--r-- | src/arch/operand.c | 60 |
2 files changed, 63 insertions, 4 deletions
diff --git a/src/arch/operand-int.h b/src/arch/operand-int.h index d2f43f1..dc505b6 100644 --- a/src/arch/operand-int.h +++ b/src/arch/operand-int.h @@ -135,5 +135,12 @@ struct _GArchOperandClass #endif +/* Ajoute une information complémentaire à un opérande. */ +bool _g_arch_operand_set_flag(GArchOperand *, ArchOperandFlag, bool); + +/* Retire une information complémentaire à un opérande. */ +bool _g_arch_operand_unset_flag(GArchOperand *, ArchOperandFlag, bool); + + #endif /* _ARCH_OPERAND_INT_H */ diff --git a/src/arch/operand.c b/src/arch/operand.c index e95f24e..81aa633 100644 --- a/src/arch/operand.c +++ b/src/arch/operand.c @@ -442,6 +442,7 @@ char *g_arch_operand_build_tooltip(const GArchOperand *operand, const GLoadedBin * * * Paramètres : operand = opérande à venir modifier. * * flag = drapeau d'information complémentaire à planter. * +* lock = indique un besoin de verrouillage des données. * * * * Description : Ajoute une information complémentaire à un opérande. * * * @@ -451,7 +452,7 @@ char *g_arch_operand_build_tooltip(const GArchOperand *operand, const GLoadedBin * * ******************************************************************************/ -bool g_arch_operand_set_flag(GArchOperand *operand, ArchOperandFlag flag) +bool _g_arch_operand_set_flag(GArchOperand *operand, ArchOperandFlag flag, bool lock) { bool result; /* Bilan à retourner */ operand_extra_data_t *extra; /* Données insérées à modifier */ @@ -460,13 +461,39 @@ bool g_arch_operand_set_flag(GArchOperand *operand, ArchOperandFlag flag) extra = GET_ARCH_OP_EXTRA(operand); - LOCK_GOBJECT_EXTRA(extra); + if (lock) + LOCK_GOBJECT_EXTRA(extra); result = !(extra->flags & flag); extra->flags |= flag; - UNLOCK_GOBJECT_EXTRA(extra); + if (lock) + UNLOCK_GOBJECT_EXTRA(extra); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : operand = opérande à venir modifier. * +* flag = drapeau d'information complémentaire à planter. * +* * +* Description : Ajoute une information complémentaire à un opérande. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_arch_operand_set_flag(GArchOperand *operand, ArchOperandFlag flag) +{ + bool result; /* Bilan à retourner */ + + result = _g_arch_operand_set_flag(operand, flag, true); return result; @@ -477,6 +504,7 @@ bool g_arch_operand_set_flag(GArchOperand *operand, ArchOperandFlag flag) * * * Paramètres : operand = opérande à venir modifier. * * flag = drapeau d'information complémentaire à planter. * +* lock = indique un besoin de verrouillage des données. * * * * Description : Retire une information complémentaire à un opérande. * * * @@ -486,7 +514,7 @@ bool g_arch_operand_set_flag(GArchOperand *operand, ArchOperandFlag flag) * * ******************************************************************************/ -bool g_arch_operand_unset_flag(GArchOperand *operand, ArchOperandFlag flag) +bool _g_arch_operand_unset_flag(GArchOperand *operand, ArchOperandFlag flag, bool lock) { bool result; /* Bilan à retourner */ operand_extra_data_t *extra; /* Données insérées à modifier */ @@ -510,6 +538,30 @@ bool g_arch_operand_unset_flag(GArchOperand *operand, ArchOperandFlag flag) /****************************************************************************** * * +* Paramètres : operand = opérande à venir modifier. * +* flag = drapeau d'information complémentaire à planter. * +* * +* Description : Retire une information complémentaire à un opérande. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_arch_operand_unset_flag(GArchOperand *operand, ArchOperandFlag flag) +{ + bool result; /* Bilan à retourner */ + + result = _g_arch_operand_unset_flag(operand, flag, true); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : operand = opérande à venir consulter. * * flag = drapeau d'information à rechercher. * * * |