Blob Blame History Raw
diff --git a/io/hpmud/jd.c b/io/hpmud/jd.c
index 20df27a..7ed4918 100644
--- a/io/hpmud/jd.c
+++ b/io/hpmud/jd.c
@@ -208,7 +208,22 @@ enum HPMUD_RESULT __attribute__ ((visibility ("hidden"))) jd_open(mud_device *pd
    {
        /* Make sure uri model matches device id model. */
        hpmud_get_uri_model(pd->uri, uri_model, sizeof(uri_model));
+
+       /* remove possible hp_ string */
+       if (strncasecmp(uri_model, "HP_", 3) == 0)
+       {
+         memmove(uri_model, uri_model + 3, 127);
+         uri_model[127] = '\0';
+       }
+
        hpmud_get_model(pd->id, model, sizeof(model));
+       /* remove possible hp_ string */
+       if (strncasecmp(model, "HP_", 3) == 0)
+       {
+         memmove(model, model + 3, 127);
+         model[127] = '\0';
+       }
+
        if (strcasecmp(uri_model, model) != 0)
        {
           stat = HPMUD_R_INVALID_URI;  /* different device plugged in */
diff --git a/io/hpmud/model.c b/io/hpmud/model.c
index d546ec1..adb3d87 100644
--- a/io/hpmud/model.c
+++ b/io/hpmud/model.c
@@ -407,7 +407,10 @@ static int ParseFile(char *datFile, char *model, char *attr, int attrSize, int *
    char rcbuf[255];
    char section[128];
    char file[128];
-   int found=0, n;
+   int found=0;
+   size_t n;
+
+   size_t model_len = strlen(model);
 
    if ((fp = fopen(datFile, "r")) == NULL)
       goto bugout;
@@ -422,10 +425,17 @@ static int ParseFile(char *datFile, char *model, char *attr, int attrSize, int *
          strncpy(section, rcbuf+1, sizeof(section)); /* found new section */
          n = strlen(section);
          section[n-2]=0; /* remove ']' and CR */
+         n -= 2;
          if (strcasecmp(model, section) == 0 ||
-            (section[0] == 'h' && section[1] == 'p' &&
-             section[2] == '_' &&
-             strcasecmp(model, section + 3) == 0))
+             (section[0] == 'h' &&
+              section[1] == 'p' &&
+              section[2] == '_' &&
+              strcasecmp(model, section + 3) == 0) ||
+             (n > model_len &&
+              strncasecmp(section, model, model_len) == 0 &&
+              strncasecmp(section + model_len, "_series", strlen("_series")) == 0
+             )
+            )
          {
             /* Found model match. */
             *bytes_read = ResolveAttributes(fp, attr, attrSize);