Merge branch 'master' into merge6
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
This commit is contained in:
		
						commit
						660d495746
					
				
					 124 changed files with 5049 additions and 1672 deletions
				
			
		| 
						 | 
				
			
			@ -27,9 +27,9 @@
 | 
			
		|||
static char *qp_duration_str (char *buf, size_t bufsz, dds_duration_t d)
 | 
			
		||||
{
 | 
			
		||||
  if (d == DDS_INFINITY)
 | 
			
		||||
    snprintf (buf, bufsz, "infinite");
 | 
			
		||||
    (void) snprintf (buf, bufsz, "infinite");
 | 
			
		||||
  else
 | 
			
		||||
    snprintf (buf, bufsz, "%u.%09u", (unsigned)(d / DDS_NSECS_IN_SEC), (unsigned)(d % DDS_NSECS_IN_SEC));
 | 
			
		||||
    (void) snprintf (buf, bufsz, "%u.%09u", (unsigned)(d / DDS_NSECS_IN_SEC), (unsigned)(d % DDS_NSECS_IN_SEC));
 | 
			
		||||
  return buf;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -443,9 +443,9 @@ static void print_dcps_participant (FILE *fp, dds_entity_t pp)
 | 
			
		|||
        qp_qos (data->qos, fp);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    dds_return_loan (rd, ptrs, n);
 | 
			
		||||
    (void) dds_return_loan (rd, ptrs, n);
 | 
			
		||||
  }
 | 
			
		||||
  dds_delete (rd);
 | 
			
		||||
  (void) dds_delete (rd);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void print_dcps_endpoint (FILE *fp, dds_entity_t pp, const char *type, dds_entity_t topic)
 | 
			
		||||
| 
						 | 
				
			
			@ -472,9 +472,9 @@ static void print_dcps_endpoint (FILE *fp, dds_entity_t pp, const char *type, dd
 | 
			
		|||
        qp_qos (data->qos,fp);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    dds_return_loan (rd, ptrs, n);
 | 
			
		||||
    (void) dds_return_loan (rd, ptrs, n);
 | 
			
		||||
  }
 | 
			
		||||
  dds_delete (rd);
 | 
			
		||||
  (void) dds_delete (rd);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void print_dcps_subscription (FILE *fp, dds_entity_t pp)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -180,7 +180,7 @@ bool record_cputime (struct record_cputime_state *state, const char *prefix, dds
 | 
			
		|||
  }
 | 
			
		||||
  state->tprev = tnow;
 | 
			
		||||
  state->s.some_above = some_above;
 | 
			
		||||
  dds_write (state->wr, &state->s);
 | 
			
		||||
  (void) dds_write (state->wr, &state->s);
 | 
			
		||||
  return print_cputime (&state->s, prefix, false, true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,7 +53,9 @@ enum topicsel {
 | 
			
		|||
  KS,   /* KeyedSeq type: seq#, key, sequence-of-octet */
 | 
			
		||||
  K32,  /* Keyed32  type: seq#, key, array-of-24-octet (sizeof = 32) */
 | 
			
		||||
  K256, /* Keyed256 type: seq#, key, array-of-248-octet (sizeof = 256) */
 | 
			
		||||
  OU    /* OneULong type: seq# */
 | 
			
		||||
  OU,   /* OneULong type: seq# */
 | 
			
		||||
  UK16, /* Unkeyed16, type: seq#, array-of-12-octet (sizeof = 16) */
 | 
			
		||||
  UK1024/* Unkeyed1024, type: seq#, array-of-1020-octet (sizeof = 1024) */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum submode {
 | 
			
		||||
| 
						 | 
				
			
			@ -317,6 +319,8 @@ union data {
 | 
			
		|||
  Keyed32 k32;
 | 
			
		||||
  Keyed256 k256;
 | 
			
		||||
  OneULong ou;
 | 
			
		||||
  Unkeyed16 uk16;
 | 
			
		||||
  Unkeyed1024 uk1024;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void verrorx (int exitcode, const char *fmt, va_list ap)
 | 
			
		||||
| 
						 | 
				
			
			@ -529,6 +533,14 @@ static void *init_sample (union data *data, uint32_t seq)
 | 
			
		|||
    case OU:
 | 
			
		||||
      data->ou.seq = seq;
 | 
			
		||||
      break;
 | 
			
		||||
    case UK16:
 | 
			
		||||
      data->uk16.seq = seq;
 | 
			
		||||
      memset (data->uk16.baggage, 0xee, sizeof (data->uk16.baggage));
 | 
			
		||||
      break;
 | 
			
		||||
    case UK1024:
 | 
			
		||||
      data->uk1024.seq = seq;
 | 
			
		||||
      memset (data->uk1024.baggage, 0xee, sizeof (data->uk1024.baggage));
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  return baggage;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -791,10 +803,12 @@ static uint32_t topic_payload_size (enum topicsel tp, uint32_t bgsize)
 | 
			
		|||
  uint32_t size = 0;
 | 
			
		||||
  switch (tp)
 | 
			
		||||
  {
 | 
			
		||||
    case KS:   size = 12 + bgsize; break;
 | 
			
		||||
    case K32:  size = 32; break;
 | 
			
		||||
    case K256: size = 256; break;
 | 
			
		||||
    case OU:   size = 4; break;
 | 
			
		||||
    case KS:     size = 12 + bgsize; break;
 | 
			
		||||
    case K32:    size = 32; break;
 | 
			
		||||
    case K256:   size = 256; break;
 | 
			
		||||
    case OU:     size = 4; break;
 | 
			
		||||
    case UK16:   size = 16; break;
 | 
			
		||||
    case UK1024: size = 1024; break;
 | 
			
		||||
  }
 | 
			
		||||
  return size;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -814,13 +828,15 @@ static bool process_data (dds_entity_t rd, struct subthread_arg *arg)
 | 
			
		|||
      uint32_t seq = 0, keyval = 0, size = 0;
 | 
			
		||||
      switch (topicsel)
 | 
			
		||||
      {
 | 
			
		||||
        case KS:   {
 | 
			
		||||
          KeyedSeq *d = (KeyedSeq *) mseq[i]; keyval = d->keyval; seq = d->seq; size = topic_payload_size (topicsel, d->baggage._length);
 | 
			
		||||
        case KS: {
 | 
			
		||||
          KeyedSeq *d = mseq[i]; keyval = d->keyval; seq = d->seq; size = topic_payload_size (topicsel, d->baggage._length);
 | 
			
		||||
          break;
 | 
			
		||||
        }
 | 
			
		||||
        case K32:  { Keyed32 *d  = (Keyed32 *)  mseq[i]; keyval = d->keyval; seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
 | 
			
		||||
        case K256: { Keyed256 *d = (Keyed256 *) mseq[i]; keyval = d->keyval; seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
 | 
			
		||||
        case OU:   { OneULong *d = (OneULong *) mseq[i]; keyval = 0;         seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
 | 
			
		||||
        case K32:    { Keyed32 *d     = mseq[i]; keyval = d->keyval; seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
 | 
			
		||||
        case K256:   { Keyed256 *d    = mseq[i]; keyval = d->keyval; seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
 | 
			
		||||
        case OU:     { OneULong *d    = mseq[i]; keyval = 0;         seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
 | 
			
		||||
        case UK16:   { Unkeyed16 *d   = mseq[i]; keyval = 0;         seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
 | 
			
		||||
        case UK1024: { Unkeyed1024 *d = mseq[i]; keyval = 0;         seq = d->seq; size = topic_payload_size (topicsel, 0); } break;
 | 
			
		||||
      }
 | 
			
		||||
      (void) check_eseq (&eseq_admin, seq, keyval, size, iseq[i].publication_handle);
 | 
			
		||||
      if (iseq[i].source_timestamp & 1)
 | 
			
		||||
| 
						 | 
				
			
			@ -1659,7 +1675,7 @@ struct multiplier {
 | 
			
		|||
 | 
			
		||||
static const struct multiplier frequency_units[] = {
 | 
			
		||||
  { "Hz", 1 },
 | 
			
		||||
  { "kHz", 1024 },
 | 
			
		||||
  { "kHz", 1000 },
 | 
			
		||||
  { NULL, 0 }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1865,7 +1881,7 @@ int main (int argc, char *argv[])
 | 
			
		|||
      case 'd': {
 | 
			
		||||
        char *col;
 | 
			
		||||
        int pos;
 | 
			
		||||
        ddsrt_strlcpy (netload_if, optarg, sizeof (netload_if));
 | 
			
		||||
        (void) ddsrt_strlcpy (netload_if, optarg, sizeof (netload_if));
 | 
			
		||||
        if ((col = strrchr (netload_if, ':')) == NULL || col == netload_if ||
 | 
			
		||||
            (sscanf (col+1, "%lf%n", &netload_bw, &pos) != 1 || (col+1)[pos] != 0))
 | 
			
		||||
          error3 ("-d%s: expected DEVICE:BANDWIDTH\n", optarg);
 | 
			
		||||
| 
						 | 
				
			
			@ -1883,6 +1899,8 @@ int main (int argc, char *argv[])
 | 
			
		|||
        else if (strcmp (optarg, "K32") == 0) topicsel = K32;
 | 
			
		||||
        else if (strcmp (optarg, "K256") == 0) topicsel = K256;
 | 
			
		||||
        else if (strcmp (optarg, "OU") == 0) topicsel = OU;
 | 
			
		||||
        else if (strcmp (optarg, "UK16") == 0) topicsel = UK16;
 | 
			
		||||
        else if (strcmp (optarg, "UK1024") == 0) topicsel = UK1024;
 | 
			
		||||
        else error3 ("%s: unknown topic\n", optarg);
 | 
			
		||||
        break;
 | 
			
		||||
      case 'M': maxwait = atof (optarg); if (maxwait <= 0) maxwait = HUGE_VAL; break;
 | 
			
		||||
| 
						 | 
				
			
			@ -1970,10 +1988,12 @@ int main (int argc, char *argv[])
 | 
			
		|||
    const dds_topic_descriptor_t *tp_desc = NULL;
 | 
			
		||||
    switch (topicsel)
 | 
			
		||||
    {
 | 
			
		||||
      case KS:   tp_suf = "KS";   tp_desc = &KeyedSeq_desc; break;
 | 
			
		||||
      case K32:  tp_suf = "K32";  tp_desc = &Keyed32_desc;  break;
 | 
			
		||||
      case K256: tp_suf = "K256"; tp_desc = &Keyed256_desc; break;
 | 
			
		||||
      case OU:   tp_suf = "OU";   tp_desc = &OneULong_desc; break;
 | 
			
		||||
      case KS:     tp_suf = "KS";     tp_desc = &KeyedSeq_desc; break;
 | 
			
		||||
      case K32:    tp_suf = "K32";    tp_desc = &Keyed32_desc;  break;
 | 
			
		||||
      case K256:   tp_suf = "K256";   tp_desc = &Keyed256_desc; break;
 | 
			
		||||
      case OU:     tp_suf = "OU";     tp_desc = &OneULong_desc; break;
 | 
			
		||||
      case UK16:   tp_suf = "UK16";   tp_desc = &Unkeyed16_desc; break;
 | 
			
		||||
      case UK1024: tp_suf = "UK1024"; tp_desc = &Unkeyed1024_desc; break;
 | 
			
		||||
    }
 | 
			
		||||
    snprintf (tpname_data, sizeof (tpname_data), "DDSPerf%cData%s", reliable ? 'R' : 'U', tp_suf);
 | 
			
		||||
    snprintf (tpname_ping, sizeof (tpname_ping), "DDSPerf%cPing%s", reliable ? 'R' : 'U', tp_suf);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,20 @@ struct OneULong
 | 
			
		|||
};
 | 
			
		||||
#pragma keylist OneULong
 | 
			
		||||
 | 
			
		||||
struct Unkeyed16
 | 
			
		||||
{
 | 
			
		||||
  unsigned long seq;
 | 
			
		||||
  octet baggage[12];
 | 
			
		||||
};
 | 
			
		||||
#pragma keylist Unkeyed16
 | 
			
		||||
 | 
			
		||||
struct Unkeyed1024
 | 
			
		||||
{
 | 
			
		||||
  unsigned long seq;
 | 
			
		||||
  octet baggage[1020];
 | 
			
		||||
};
 | 
			
		||||
#pragma keylist Unkeyed1024
 | 
			
		||||
 | 
			
		||||
struct Keyed32
 | 
			
		||||
{
 | 
			
		||||
  unsigned long seq;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -266,162 +266,6 @@ Use \"\" for default partition.\n",
 | 
			
		|||
    exit (1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void expand_append(char **dst, size_t *sz,size_t *pos, char c) {
 | 
			
		||||
    if (*pos == *sz) {
 | 
			
		||||
        *sz += 1024;
 | 
			
		||||
        *dst = dds_realloc(*dst, *sz);
 | 
			
		||||
    }
 | 
			
		||||
    (*dst)[*pos] = c;
 | 
			
		||||
    (*pos)++;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *expand_envvars(const char *src0);
 | 
			
		||||
 | 
			
		||||
// FIXME: This is the same as the expand function in util. Merge.
 | 
			
		||||
static char *expand_env(const char *name, char op, const char *alt) {
 | 
			
		||||
    char *env = NULL;
 | 
			
		||||
    ddsrt_getenv(name, &env);
 | 
			
		||||
    switch (op) {
 | 
			
		||||
    case 0:
 | 
			
		||||
        return dds_string_dup(env ? env : "");
 | 
			
		||||
    case '-':
 | 
			
		||||
        return env ? dds_string_dup(env) : expand_envvars(alt);
 | 
			
		||||
    case '?':
 | 
			
		||||
        if (env)
 | 
			
		||||
            return dds_string_dup(env);
 | 
			
		||||
        else {
 | 
			
		||||
            char *altx = expand_envvars(alt);
 | 
			
		||||
            error_exit("%s: %s\n", name, altx);
 | 
			
		||||
            dds_free(altx);
 | 
			
		||||
            return NULL;
 | 
			
		||||
        }
 | 
			
		||||
    case '+':
 | 
			
		||||
        return env ? expand_envvars(alt) : dds_string_dup("");
 | 
			
		||||
    default:
 | 
			
		||||
        exit(2);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *expand_envbrace(const char **src) {
 | 
			
		||||
    const char *start = *src + 1;
 | 
			
		||||
    char *name, *x;
 | 
			
		||||
    assert(**src == '{');
 | 
			
		||||
    (*src)++;
 | 
			
		||||
    while (**src && **src != ':' && **src != '}')
 | 
			
		||||
        (*src)++;
 | 
			
		||||
    if (**src == 0)
 | 
			
		||||
        goto err;
 | 
			
		||||
 | 
			
		||||
    name = dds_alloc((size_t) (*src - start) + 1);
 | 
			
		||||
    memcpy(name, start, (size_t) (*src - start));
 | 
			
		||||
    name[*src - start] = 0;
 | 
			
		||||
    if (**src == '}') {
 | 
			
		||||
        (*src)++;
 | 
			
		||||
        x = expand_env(name, 0, NULL);
 | 
			
		||||
        dds_free(name);
 | 
			
		||||
        return x;
 | 
			
		||||
    } else {
 | 
			
		||||
        const char *altstart;
 | 
			
		||||
        char *alt;
 | 
			
		||||
        char op;
 | 
			
		||||
        assert(**src == ':');
 | 
			
		||||
        (*src)++;
 | 
			
		||||
 | 
			
		||||
        switch (**src) {
 | 
			
		||||
        case '-': case '+': case '?':
 | 
			
		||||
            op = **src;
 | 
			
		||||
            (*src)++;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            goto err;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        altstart = *src;
 | 
			
		||||
        while (**src && **src != '}') {
 | 
			
		||||
            if (**src == '\\') {
 | 
			
		||||
                (*src)++;
 | 
			
		||||
                if (**src == 0)
 | 
			
		||||
                goto err;
 | 
			
		||||
            }
 | 
			
		||||
            (*src)++;
 | 
			
		||||
        }
 | 
			
		||||
        if (**src == 0)
 | 
			
		||||
            goto err;
 | 
			
		||||
        assert(**src == '}');
 | 
			
		||||
        alt = dds_alloc((size_t) (*src - altstart) + 1);
 | 
			
		||||
        memcpy(alt, altstart, (size_t) (*src - altstart));
 | 
			
		||||
        alt[*src - altstart] = 0;
 | 
			
		||||
        (*src)++;
 | 
			
		||||
        x = expand_env(name, op, alt);
 | 
			
		||||
        dds_free(alt);
 | 
			
		||||
        dds_free(name);
 | 
			
		||||
        return x;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    err:
 | 
			
		||||
        error_exit("%*.*s: invalid expansion\n", (int) (*src - start), (int) (*src - start), start);
 | 
			
		||||
    return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *expand_envsimple(const char **src) {
 | 
			
		||||
    const char *start = *src;
 | 
			
		||||
    char *name, *x;
 | 
			
		||||
    while (**src && (isalnum((unsigned char)**src) || **src == '_'))
 | 
			
		||||
        (*src)++;
 | 
			
		||||
    assert(*src > start);
 | 
			
		||||
    name = dds_alloc((size_t) (*src - start) + 1);
 | 
			
		||||
    memcpy(name, start, (size_t) (*src - start));
 | 
			
		||||
    name[*src - start] = 0;
 | 
			
		||||
    x = expand_env(name, 0, NULL);
 | 
			
		||||
    dds_free(name);
 | 
			
		||||
    return x;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *expand_envchar(const char **src) {
 | 
			
		||||
    char name[2];
 | 
			
		||||
    assert(**src);
 | 
			
		||||
    name[0] = **src;
 | 
			
		||||
    name[1] = 0;
 | 
			
		||||
    (*src)++;
 | 
			
		||||
    return expand_env(name, 0, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static char *expand_envvars(const char *src0) {
 | 
			
		||||
    /* Expands $X, ${X}, ${X:-Y}, ${X:+Y}, ${X:?Y} forms */
 | 
			
		||||
    const char *src = src0;
 | 
			
		||||
    size_t sz = strlen(src) + 1, pos = 0;
 | 
			
		||||
    char *dst = dds_alloc(sz);
 | 
			
		||||
    while (*src) {
 | 
			
		||||
        if (*src == '\\') {
 | 
			
		||||
            src++;
 | 
			
		||||
            if (*src == 0)
 | 
			
		||||
                error_exit("%s: incomplete escape at end of string\n", src0);
 | 
			
		||||
            expand_append(&dst, &sz, &pos, *src++);
 | 
			
		||||
        } else if (*src == '$') {
 | 
			
		||||
            char *x, *xp;
 | 
			
		||||
            src++;
 | 
			
		||||
            if (*src == 0) {
 | 
			
		||||
                error_exit("%s: incomplete variable expansion at end of string\n", src0);
 | 
			
		||||
                return NULL;
 | 
			
		||||
            } else if (*src == '{') {
 | 
			
		||||
                x = expand_envbrace(&src);
 | 
			
		||||
            } else if (isalnum((unsigned char)*src) || *src == '_') {
 | 
			
		||||
                x = expand_envsimple(&src);
 | 
			
		||||
            } else {
 | 
			
		||||
                x = expand_envchar(&src);
 | 
			
		||||
            }
 | 
			
		||||
            xp = x;
 | 
			
		||||
            while (*xp)
 | 
			
		||||
                expand_append(&dst, &sz, &pos, *xp++);
 | 
			
		||||
            dds_free(x);
 | 
			
		||||
        } else {
 | 
			
		||||
            expand_append(&dst, &sz, &pos, *src++);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    expand_append(&dst, &sz, &pos, 0);
 | 
			
		||||
    return dst;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static unsigned split_partitions(const char ***p_ps, char **p_bufcopy, const char *buf) {
 | 
			
		||||
    const char *b;
 | 
			
		||||
    const char **ps;
 | 
			
		||||
| 
						 | 
				
			
			@ -432,7 +276,7 @@ static unsigned split_partitions(const char ***p_ps, char **p_bufcopy, const cha
 | 
			
		|||
        nps += (*b == ',');
 | 
			
		||||
    }
 | 
			
		||||
    ps = dds_alloc(nps * sizeof(*ps));
 | 
			
		||||
    bufcopy = expand_envvars(buf);
 | 
			
		||||
    bufcopy = ddsrt_expand_envvars_sh(buf, 0);
 | 
			
		||||
    i = 0; bc = bufcopy;
 | 
			
		||||
    while (1) {
 | 
			
		||||
        ps[i++] = bc;
 | 
			
		||||
| 
						 | 
				
			
			@ -1428,7 +1272,7 @@ static char *pub_do_nonarb(const struct writerspec *spec, uint32_t *seq) {
 | 
			
		|||
        case 'Q': {
 | 
			
		||||
            dds_qos_t *qos = dds_create_qos ();
 | 
			
		||||
            setqos_from_args (DDS_KIND_PARTICIPANT, qos, 1, (const char **) &arg);
 | 
			
		||||
            dds_set_qos (dp, qos);
 | 
			
		||||
            (void) dds_set_qos (dp, qos);
 | 
			
		||||
            dds_delete_qos (qos);
 | 
			
		||||
            break;
 | 
			
		||||
          }
 | 
			
		||||
| 
						 | 
				
			
			@ -2059,8 +1903,8 @@ static uint32_t autotermthread(void *varg __attribute__((unused))) {
 | 
			
		|||
        tnow = dds_time();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    dds_waitset_detach(ws, termcond);
 | 
			
		||||
    dds_delete(ws);
 | 
			
		||||
    (void) dds_waitset_detach(ws, termcond);
 | 
			
		||||
    (void) dds_delete(ws);
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2104,6 +1948,7 @@ static int get_metadata(char **metadata, char **typename, char **keylist, const
 | 
			
		|||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
static dds_entity_t find_topic(dds_entity_t dpFindTopic, const char *name, const dds_duration_t *timeout) {
 | 
			
		||||
    dds_entity_t tp;
 | 
			
		||||
    (void)timeout;
 | 
			
		||||
| 
						 | 
				
			
			@ -2158,6 +2003,7 @@ static dds_entity_t find_topic(dds_entity_t dpFindTopic, const char *name, const
 | 
			
		|||
 | 
			
		||||
    return tp;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void set_systemid_env(void) {
 | 
			
		||||
//    TODO Determine encoding of dds_instance_handle_t, and see what sort of value can be extracted from it, if any
 | 
			
		||||
| 
						 | 
				
			
			@ -2647,7 +2493,7 @@ int main(int argc, char *argv[]) {
 | 
			
		|||
    {
 | 
			
		||||
        char **ps = (char **) dds_alloc(sizeof(char *) * (uint32_t)(argc - optind));
 | 
			
		||||
        for (i = 0; i < (unsigned) (argc - optind); i++)
 | 
			
		||||
            ps[i] = expand_envvars(argv[(unsigned) optind + i]);
 | 
			
		||||
            ps[i] = ddsrt_expand_envvars_sh(argv[(unsigned) optind + i], 0);
 | 
			
		||||
        if (want_reader) {
 | 
			
		||||
            qos = dds_create_qos();
 | 
			
		||||
            setqos_from_args(DDS_KIND_SUBSCRIBER, qos, nqsubscriber, qsubscriber);
 | 
			
		||||
| 
						 | 
				
			
			@ -2679,7 +2525,9 @@ int main(int argc, char *argv[]) {
 | 
			
		|||
        case OU:   spec[i].tp = new_topic(spec[i].topicname, ts_OneULong, qos); break;
 | 
			
		||||
        case ARB:
 | 
			
		||||
            // TODO ARB type support
 | 
			
		||||
#if 1
 | 
			
		||||
            error_exit("Currently doesn't support ARB type\n");
 | 
			
		||||
#else
 | 
			
		||||
            if (spec[i].metadata == NULL) {
 | 
			
		||||
                if (!(spec[i].tp = find_topic(dp, spec[i].topicname, &spec[i].findtopic_timeout)))
 | 
			
		||||
                    error_exit("topic %s not found\n", spec[i].topicname);
 | 
			
		||||
| 
						 | 
				
			
			@ -2692,6 +2540,7 @@ int main(int argc, char *argv[]) {
 | 
			
		|||
//                dds_topic_descriptor_delete((dds_topic_descriptor_t*) ts);
 | 
			
		||||
            }
 | 
			
		||||
//            spec[i].rd.tgtp = spec[i].wr.tgtp = tgnew(spec[i].tp, printtype);
 | 
			
		||||
#endif
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        assert(spec[i].tp);
 | 
			
		||||
| 
						 | 
				
			
			@ -2705,7 +2554,7 @@ int main(int argc, char *argv[]) {
 | 
			
		|||
            fprintf (stderr,"C99 API doesn't support the creation of content filtered topic.\n");
 | 
			
		||||
            spec[i].cftp = spec[i].tp;
 | 
			
		||||
//            TODO Content Filtered Topic support
 | 
			
		||||
//            char name[40], *expr = expand_envvars(spec[i].cftp_expr);
 | 
			
		||||
//            char name[40], *expr = expand_envvars_sh(spec[i].cftp_exp, 0);
 | 
			
		||||
//            DDS_StringSeq *params = DDS_StringSeq__alloc();
 | 
			
		||||
//            snprintf (name, sizeof (name), "cft%u", i);
 | 
			
		||||
//            if ((spec[i].cftp = DDS_DomainParticipant_create_contentfilteredtopic(dp, name, spec[i].tp, expr, params)) == NULL)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue