summaryrefslogtreecommitdiff
path: root/tools/d2c/encoding.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/d2c/encoding.c')
-rw-r--r--tools/d2c/encoding.c59
1 files changed, 43 insertions, 16 deletions
diff --git a/tools/d2c/encoding.c b/tools/d2c/encoding.c
index f8b72d9..9fbf0df 100644
--- a/tools/d2c/encoding.c
+++ b/tools/d2c/encoding.c
@@ -187,10 +187,14 @@ bool has_encoding_spec_prefix(const encoding_spec *spec, const char *prefix)
char *build_encoding_spec_prefix(const encoding_spec *spec)
{
char *result; /* Chaîne à retourner */
+ int ret; /* Recette de construction */
assert(spec->lprefix);
- asprintf(&result, "%s%u", spec->lprefix, spec->index);
+ ret = asprintf(&result, "%s%u", spec->lprefix, spec->index);
+
+ if (ret == -1)
+ result = NULL;
return result;
@@ -328,6 +332,7 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
disass_assert *dassert; /* Eventuelles conditions */
char *suffix; /* Complément d'identifiant */
char *sid; /* Base de sous-identifiant */
+ int ret; /* Bilan d'une construction */
size_t i; /* Boucle de parcours */
bool op_decl; /* Suivi des déclaration #1 */
bool imm_decl; /* Suivi des déclaration #2 */
@@ -365,7 +370,7 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
}
if (!result)
- goto wesrd_exit;
+ goto exit;
/* Déclarations préalables */
@@ -375,23 +380,23 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
result = mark_syntax_items(spec->syntaxes[i], spec->bits);
if (!result)
- goto wesrd_exit;
+ goto exit;
result = declare_used_bits_fields(spec->bits, fd);
- if (!result) goto wesrd_exit;
+ if (!result) goto exit;
if (openbar)
{
result = declare_encoding_syntax(spec->syntaxes[0], fd, spec->bits);
- if (!result) goto wesrd_exit;
+ if (!result) goto exit;
}
dprintf(fd, "\n");
/* Vérification que le décodage est possible */
- result &= check_bits_correctness(spec->bits, fd);
- if (!result) goto wesrd_exit;
+ result = check_bits_correctness(spec->bits, fd);
+ if (!result) goto exit;
dprintf(fd, "\n");
@@ -406,15 +411,20 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
/* Définition des champs bruts */
result = define_used_bits_fields(spec->bits, fd);
- if (!result) goto wesrd_exit;
+ if (!result) goto exit;
suffix = build_encoding_spec_prefix(spec);
+ if (suffix == NULL) goto exit;
+
make_string_upper(suffix);
- asprintf(&sid, "%s_%s", id, suffix);
+ ret = asprintf(&sid, "%s_%s", id, suffix);
free(suffix);
+ if (ret == -1)
+ goto exit;
+
for (i = 0; i < spec->syntax_count && result; i++)
{
if (spec->syntax_count > 1)
@@ -426,11 +436,14 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
free(sid);
if (!result)
- goto wesrd_exit;
+ goto exit;
/* Encodage en dernier lieu */
- asprintf(&encoding_fc, "g_%s_instruction_set_encoding", arch);
+ ret = asprintf(&encoding_fc, "g_%s_instruction_set_encoding", arch);
+
+ if (ret == -1)
+ goto exit;
cast = build_cast_if_needed(encoding_fc);
@@ -463,7 +476,7 @@ bool write_encoding_spec_raw_disass(const encoding_spec *spec, int fd, const cha
}
- wesrd_exit:
+ exit:
return result;
@@ -581,9 +594,11 @@ bool write_encoding_spec_keywords(const encoding_spec *spec, int fd, const char
asm_pattern *pattern; /* Définition d'assemblage */
const char *keyword; /* Mot clef principal */
- result = true;
-
suffix = build_encoding_spec_prefix(spec);
+
+ result = (suffix != NULL);
+ if (!result) goto exit;
+
make_string_upper(suffix);
for (i = 0; i < spec->syntax_count; i++)
@@ -607,6 +622,8 @@ bool write_encoding_spec_keywords(const encoding_spec *spec, int fd, const char
free(suffix);
+ exit:
+
return result;
}
@@ -634,9 +651,11 @@ bool write_encoding_spec_subid(const encoding_spec *spec, int fd, const char *na
instr_id *subid; /* Sous-identifiant de syntaxe */
unsigned int idval; /* Identifiant unique attribué */
- result = true;
-
suffix = build_encoding_spec_prefix(spec);
+
+ result = (suffix != NULL);
+ if (!result) goto exit;
+
make_string_upper(suffix);
for (i = 0; i < spec->syntax_count; i++)
@@ -653,6 +672,8 @@ bool write_encoding_spec_subid(const encoding_spec *spec, int fd, const char *na
free(suffix);
+ exit:
+
return result;
}
@@ -687,6 +708,10 @@ bool write_encoding_spec_hooks(const encoding_spec *spec, int fd, const char *na
if (refine)
{
suffix = build_encoding_spec_prefix(spec);
+
+ result = (suffix != NULL);
+ if (!result) goto exit;
+
make_string_upper(suffix);
for (i = 0; i < spec->syntax_count; i++)
@@ -730,6 +755,8 @@ bool write_encoding_spec_hooks(const encoding_spec *spec, int fd, const char *na
}
+ exit:
+
return result;
}