nids = convert_hostnames(optarg);
if (!nids)
return 1;
- rc = add_param(mop->mo_ldd.ldd_params, PARAM_FAILNODE,
- nids);
+ rc = append_param(mop->mo_ldd.ldd_params,
+ PARAM_FAILNODE, nids, ':');
free(nids);
if (rc)
return rc;
char *nids = convert_hostnames(optarg);
if (!nids)
return 1;
- rc = add_param(mop->mo_ldd.ldd_params, PARAM_MGSNODE,
- nids);
+ rc = append_param(mop->mo_ldd.ldd_params,
+ PARAM_MGSNODE, nids, ':');
free(nids);
if (rc)
return rc;
return ENOENT;
}
+int append_param(char *buf, char *key, char *val, char sep)
+{
+ int key_len, i, offset, old_val_len;
+ char *ptr = NULL, str[1024];
+
+ if (key)
+ ptr = strstr(buf, key);
+
+ /* key doesn't exist yet, so just add it */
+ if (ptr == NULL)
+ return add_param(buf, key, val);
+
+ key_len = strlen(key);
+
+ /* Copy previous values to str */
+ for (i = 0; i < sizeof(str); ++i) {
+ if ((ptr[i+key_len] == ' ') || (ptr[i+key_len] == '\0'))
+ break;
+ str[i] = ptr[i+key_len];
+ }
+ if (i == sizeof(str))
+ return E2BIG;
+ old_val_len = i;
+
+ offset = old_val_len+key_len;
+
+ /* Move rest of buf to overwrite previous key and value */
+ for (i = 0; ptr[i+offset] != '\0'; ++i)
+ ptr[i] = ptr[i+offset];
+
+ ptr[i] = '\0';
+
+ snprintf(str+old_val_len, sizeof(str)-old_val_len, "%c%s", sep, val);
+
+ return add_param(buf, key, str);
+}
+
char *strscat(char *dst, char *src, int buflen)
{
dst[buflen - 1] = 0;
int run_command_err(char *cmd, int cmdsz, char *error_msg);
int run_command(char *cmd, int cmdsz);
int add_param(char *buf, char *key, char *val);
+int append_param(char *buf, char *key, char *val, char sep);
int get_param(char *buf, char *key, char **val);
char *strscat(char *dst, char *src, int buflen);
char *strscpy(char *dst, char *src, int buflen);