summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/d2c/coder.c96
1 files changed, 26 insertions, 70 deletions
diff --git a/tools/d2c/coder.c b/tools/d2c/coder.c
index cd64d88..9066869 100644
--- a/tools/d2c/coder.c
+++ b/tools/d2c/coder.c
@@ -79,13 +79,10 @@ static unsigned int get_bit_width_for_encoding_spec(const rented_coder *, const
/* Ouvre un fichier principal en écriture pour y placer du code. */
-static int open_instr_header_file(const rented_coder *, const output_info *, const char *, bool *);
-
-/* Ouvre un fichier principal en écriture pour y placer du code. */
-static int open_instr_code_file(const rented_coder *, const output_info *, const char *, bool *);
+static int open_code_file(const rented_coder *, const char *, const char *, bool *);
/* Ouvre un fichier global en écriture pour y placer du code. */
-static int open_global_header_file(const rented_coder *, const output_info *, const char *, bool *);
+static int open_header_file(const char *, const char *, const char *, bool *);
/* Imprime dans un flux donné un commentaire de propriété. */
static void write_header_file_license(int, const output_info *, const char *, const char *);
@@ -574,53 +571,7 @@ char *build_coder_main_identifier(const rented_coder *coder, const output_info *
/******************************************************************************
* *
* Paramètres : coder = gestion par la machine en remplacement de l'humain. *
-* info = précisions quant à la génération. *
-* prefix = type d'encodage à répercuter sur le nom de fichier. *
-* new = dit si l'opération a abouti à une création. [OUT] *
-* *
-* Description : Ouvre un fichier principal en écriture pour y placer du code.*
-* *
-* Retour : Descripteur du fichier ouvert ou -1 en cas d'échec. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static int open_instr_header_file(const rented_coder *coder, const output_info *info, const char *prefix, bool *new)
-{
- int result; /* Descripteur à retourner */
- char *pathname; /* Chemin d'accès à constituer */
- int ret; /* Test d'existence du fichier */
- int flags; /* Mode d'accès au fichier */
-
- if (prefix != NULL)
- asprintf(&pathname, "%s%s_opcodes.h", info->directory, prefix);
- else
- asprintf(&pathname, "%sopcodes.h", info->directory);
-
- ret = access(pathname, F_OK);
-
- *new = (ret != 0);
-
- if (*new)
- flags = O_WRONLY | O_CREAT;
- else
- flags = O_WRONLY | O_APPEND;
-
- result = open(pathname, flags, 0644);
- if (result == -1) perror("open()");
-
- free(pathname);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : coder = gestion par la machine en remplacement de l'humain. *
-* info = précisions quant à la génération. *
+* path = chemin du répertoire de sortie. *
* prefix = type d'encodage à répercuter sur le nom de fichier. *
* new = dit si l'opération a abouti à une création. [OUT] *
* *
@@ -632,7 +583,7 @@ static int open_instr_header_file(const rented_coder *coder, const output_info *
* *
******************************************************************************/
-static int open_instr_code_file(const rented_coder *coder, const output_info *info, const char *prefix, bool *new)
+static int open_code_file(const rented_coder *coder, const char *path, const char *prefix, bool *new)
{
int result; /* Descripteur à retourner */
char *group; /* Regroupement des similarités*/
@@ -649,9 +600,9 @@ static int open_instr_code_file(const rented_coder *coder, const output_info *in
*sep = '\0';
if (prefix != NULL)
- asprintf(&pathname, "%s%s_%s.c", info->directory, prefix, group);
+ asprintf(&pathname, "%s%s_%s.c", path, prefix, group);
else
- asprintf(&pathname, "%s%s.c", info->directory, group);
+ asprintf(&pathname, "%s%s.c", path, group);
free(group);
@@ -676,10 +627,10 @@ static int open_instr_code_file(const rented_coder *coder, const output_info *in
/******************************************************************************
* *
-* Paramètres : coder = gestion par la machine en remplacement de l'humain. *
-* info = précisions quant à la génération. *
-* name = nom du fichier ciblé par l'opération. *
-* new = indique si l'opération a créé le fichier ciblé. [OUT]*
+* Paramètres : path = chemin du répertoire de sortie. *
+* prefix = type d'encodage à répercuter sur le nom de fichier. *
+* name = nom du fichier ciblé par l'opération. *
+* new = indique si l'opération a créé le fichier. [OUT] *
* *
* Description : Ouvre un fichier global en écriture pour y placer du code. *
* *
@@ -689,14 +640,19 @@ static int open_instr_code_file(const rented_coder *coder, const output_info *in
* *
******************************************************************************/
-static int open_global_header_file(const rented_coder *coder, const output_info *info, const char *name, bool *new)
+static int open_header_file(const char *path, const char *prefix, const char *name, bool *new)
{
int result; /* Descripteur à retourner */
char *pathname; /* Chemin d'accès à constituer */
int ret; /* Test d'existence du fichier */
int flags; /* Mode d'accès au fichier */
- asprintf(&pathname, "%s%s.h", info->directory, name);
+ asprintf(&pathname, "%s%s.h", path, name);
+
+ if (prefix != NULL)
+ asprintf(&pathname, "%s%s_%s.h", path, prefix, name);
+ else
+ asprintf(&pathname, "%s%s.h", path, name);
ret = access(pathname, F_OK);
@@ -932,7 +888,7 @@ bool output_coder_body(const rented_coder *coder, const output_info *info)
if (!has_encoding_spec_prefix(coder->specs[j], enc_name->src))
continue;
- header_fd = open_instr_header_file(coder, info, enc_name->dest, &header_new);
+ header_fd = open_header_file(info->directory, enc_name->dest, "opcodes", &header_new);
if (header_fd == -1)
{
result = false;
@@ -954,7 +910,7 @@ bool output_coder_body(const rented_coder *coder, const output_info *info)
}
- code_fd = open_instr_code_file(coder, info, enc_name->dest, &code_new);
+ code_fd = open_code_file(coder, info->directory, enc_name->dest, &code_new);
if (code_fd == -1)
{
result = false;
@@ -1009,7 +965,7 @@ bool output_coder_body(const rented_coder *coder, const output_info *info)
if (!has_encoding_spec_prefix(coder->specs[j], enc_name->src))
continue;
- header_fd = open_instr_header_file(coder, info, enc_name->dest, &header_new);
+ header_fd = open_header_file(info->directory, enc_name->dest, "opcodes", &header_new);
if (header_fd == -1)
{
result = false;
@@ -1018,7 +974,7 @@ bool output_coder_body(const rented_coder *coder, const output_info *info)
assert(!header_new);
- code_fd = open_instr_code_file(coder, info, enc_name->dest, &code_new);
+ code_fd = open_code_file(coder, info->directory, enc_name->dest, &code_new);
if (code_fd == -1)
{
result = false;
@@ -1557,7 +1513,7 @@ bool output_coder_identifier(const rented_coder *coder, const output_info *info)
/* Ouverture de la destination */
- fd = open_global_header_file(coder, info, "identifiers", &created);
+ fd = open_header_file(info->directory, NULL, "identifiers", &created);
if (fd == -1) goto oci_exit;
if (created)
@@ -1702,7 +1658,7 @@ bool output_coder_sub_identifier(const rented_coder *coder, const output_info *i
/* Ouverture de la destination */
- fd = open_global_header_file(coder, info, "subidentifiers", &created);
+ fd = open_header_file(info->directory, NULL, "subidentifiers", &created);
if (fd == -1) goto ocsi_exit;
if (created)
@@ -1867,7 +1823,7 @@ bool output_coder_keyword(const rented_coder *coder, const output_info *info)
/* Ouverture de la destination */
- fd = open_global_header_file(coder, info, "keywords", &created);
+ fd = open_header_file(info->directory, NULL, "keywords", &created);
if (fd == -1) goto ock_exit;
if (created)
@@ -2061,7 +2017,7 @@ bool output_coder_hooks(const rented_coder *coder, const output_info *info)
/* Ouverture de la destination */
- fd = open_global_header_file(coder, info, "hooks", &created);
+ fd = open_header_file(info->directory, NULL, "hooks", &created);
if (fd == -1) goto och_exit;
if (created)
@@ -2223,7 +2179,7 @@ bool output_coder_description(const rented_coder *coder, const output_info *info
/* Ouverture de la destination */
- fd = open_global_header_file(coder, info, "descriptions", &created);
+ fd = open_header_file(info->directory, NULL, "descriptions", &created);
if (fd == -1) goto ocd_exit;
if (created)