urj_vhdl_set_entity() saved the entity name in the parts part_name
        even though we don't know at that stage if the idcode matches for
        this file.

        Hunting this bug down, I found too many things are called part, so
        part of this is to change part->part to part->part_name, ditto for
        manufaturer to make it easier to find the offender.
---
 urjtag/include/urjtag/part.h | 4 ++--
 urjtag/src/bfin/bfin.c       | 2 +-
 urjtag/src/bsdl/bsdl.c       | 5 ++++-
 urjtag/src/bsdl/bsdl_types.h | 2 ++
 urjtag/src/bsdl/vhdl_bison.y | 5 ++---
 urjtag/src/part/part.c       | 6 +++---
 urjtag/src/tap/detect.c      | 8 ++++----
 7 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/urjtag/include/urjtag/part.h b/urjtag/include/urjtag/part.h
index f0cddbc7..50ce74df 100644
--- a/urjtag/include/urjtag/part.h
+++ b/urjtag/include/urjtag/part.h
@@ -42,8 +42,8 @@ struct URJ_PART
 {
     urj_tap_register_t *id;
     char *alias;                /* djf refdes */
-    char manufacturer[URJ_PART_MANUFACTURER_MAXLEN + 1];
-    char part[URJ_PART_PART_MAXLEN + 1];
+    char manufacturer_name[URJ_PART_MANUFACTURER_MAXLEN + 1];
+    char part_name[URJ_PART_PART_MAXLEN + 1];
     char stepping[URJ_PART_STEPPING_MAXLEN + 1];
     urj_part_signal_t *signals;
     urj_part_salias_t *saliases;
diff --git a/urjtag/src/bfin/bfin.c b/urjtag/src/bfin/bfin.c
index dd4bd3b2..d7c9d39d 100644
--- a/urjtag/src/bfin/bfin.c
+++ b/urjtag/src/bfin/bfin.c
@@ -131,7 +131,7 @@ part_scan_select (urj_chain_t *chain, int n, int scan)
     if (part->active_instruction == NULL)
     {
         urj_log (URJ_LOG_LEVEL_ERROR,
-                 _("%s: unknown instruction '%s'\n"), part->part, scans[scan]);
+                 _("%s: unknown instruction '%s'\n"), part->part_name, 
scans[scan]);
         return -1;
     }
 
diff --git a/urjtag/src/bsdl/bsdl.c b/urjtag/src/bsdl/bsdl.c
index afb5d635..d81e969e 100644
--- a/urjtag/src/bsdl/bsdl.c
+++ b/urjtag/src/bsdl/bsdl.c
@@ -140,10 +140,13 @@ urj_bsdl_read_file (urj_chain_t *chain, const char 
*BSDL_File_Name,
 
             result = urj_bsdl_process_elements (&jtag_ctrl, idcode);
 
-            if (result >= 0)
+            if (result >= 0) {
+               strncpy(jtag_ctrl.part->part_name, 
vhdl_parser_priv->entity_name, URJ_PART_PART_MAXLEN);
+               jtag_ctrl.part->part_name[URJ_PART_PART_MAXLEN] = '\0';
                 urj_bsdl_msg (proc_mode,
                               _("BSDL file '%s' passed BSDL stage 
correctly\n"),
                               BSDL_File_Name);
+           }
 
         }
         else
diff --git a/urjtag/src/bsdl/bsdl_types.h b/urjtag/src/bsdl/bsdl_types.h
index d19ffd11..efe09579 100644
--- a/urjtag/src/bsdl/bsdl_types.h
+++ b/urjtag/src/bsdl/bsdl_types.h
@@ -157,10 +157,12 @@ typedef struct jtag_ctrl urj_bsdl_jtag_ctrl_t;
 
 /* private data of the VHDL bison parser
    used to store variables the would end up as globals otherwise */
+#define VHDL_PARSER_ENTITY_NAME_MAXLEN            20
 struct vhdl_parser_priv
 {
     char Package_File_Name[100];
     int Reading_Package;
+    char entity_name[VHDL_PARSER_ENTITY_NAME_MAXLEN+1];
     char *buffer;
     size_t len_buffer;
     void *scanner;
diff --git a/urjtag/src/bsdl/vhdl_bison.y b/urjtag/src/bsdl/vhdl_bison.y
index 4030b3b4..4d057df5 100644
--- a/urjtag/src/bsdl/vhdl_bison.y
+++ b/urjtag/src/bsdl/vhdl_bison.y
@@ -918,9 +918,8 @@ urj_vhdl_set_entity (urj_vhdl_parser_priv_t *priv, char 
*entityname)
 {
     if (priv->jtag_ctrl->proc_mode & URJ_BSDL_MODE_INSTR_EXEC)
     {
-        strncpy (priv->jtag_ctrl->part->part, entityname,
-                 URJ_PART_PART_MAXLEN);
-        priv->jtag_ctrl->part->part[URJ_PART_PART_MAXLEN] = '\0';
+        strncpy (priv->entity_name, entityname, 
VHDL_PARSER_ENTITY_NAME_MAXLEN);
+        priv->entity_name[VHDL_PARSER_ENTITY_NAME_MAXLEN] = '\0';
     }
 
     free (entityname);
diff --git a/urjtag/src/part/part.c b/urjtag/src/part/part.c
index b7297a05..f5c4dbd0 100644
--- a/urjtag/src/part/part.c
+++ b/urjtag/src/part/part.c
@@ -52,8 +52,8 @@ urj_part_alloc (const urj_tap_register_t *id)
     p->alias = NULL;            /* djf */
     /* @@@@ RFHH check result */
     p->id = urj_tap_register_duplicate (id);
-    p->manufacturer[0] = '\0';
-    p->part[0] = '\0';
+    p->manufacturer_name[0] = '\0';
+    p->part_name[0] = '\0';
     p->stepping[0] = '\0';
     p->signals = NULL;
     p->saliases = NULL;
@@ -319,7 +319,7 @@ urj_part_print (urj_log_level_t ll, urj_part_t *p)
         instruction = _("(none)");
     if (dr == NULL)
         dr = _("(none)");
-    urj_log (ll, format, p->manufacturer, p->part, p->stepping, instruction,
+    urj_log (ll, format, p->manufacturer_name, p->part_name, p->stepping, 
instruction,
              dr);
 
     return URJ_STATUS_OK;
diff --git a/urjtag/src/tap/detect.c b/urjtag/src/tap/detect.c
index 5c139507..526d2a99 100644
--- a/urjtag/src/tap/detect.c
+++ b/urjtag/src/tap/detect.c
@@ -419,8 +419,8 @@ urj_tap_detect_parts (urj_chain_t *chain, const char 
*db_path, int maxirlen)
                      data_path);
 
             /* run JTAG declarations */
-            strcpy (part->manufacturer, manufacturer);
-            strcpy (part->part, partname);
+            strcpy (part->manufacturer_name, manufacturer);
+            strcpy (part->part_name, partname);
             strcpy (part->stepping, stepping);
             if (urj_parse_include (chain, data_path, 1) == URJ_STATUS_FAIL)
                 urj_log_error_describe (URJ_LOG_LEVEL_ERROR);
@@ -434,7 +434,7 @@ urj_tap_detect_parts (urj_chain_t *chain, const char 
*db_path, int maxirlen)
                                                                   "IDCODE");
         
         /* Do part specific initialization.  */
-        part_init_func = urj_part_find_init (part->part);
+        part_init_func = urj_part_find_init (part->part_name);
         if (part_init_func)
         {
             part->params = malloc (sizeof (urj_part_params_t));
@@ -496,7 +496,7 @@ urj_tap_manual_add (urj_chain_t *chain, int instr_len)
     if (part == NULL)
         return -1;
 
-    strncpy (part->part, "unknown", URJ_PART_PART_MAXLEN);
+    strncpy (part->part_name, "unknown", URJ_PART_PART_MAXLEN);
     part->instruction_length = instr_len;
 
     urj_part_parts_add_part (chain->parts, part);
-- 
2.21.0



_______________________________________________
UrJTAG-development mailing list
UrJTAG-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/urjtag-development

Reply via email to