int jt_lcfg_setparam(int argc, char **argv) { int rc = 0, i; struct param_opts popt; char pattern[PATH_MAX]; char *path = NULL, *value = NULL; rc = setparam_cmdline(argc, argv, &popt); if (rc < 0 || rc >= argc) return CMD_HELP; if (popt.po_params2) /* We can't delete parameters that were * set with old conf_param interface */ return jt_lcfg_mgsparam2(argc, argv, &popt); for (i = rc, rc = 0; i < argc; i++) { int rc2; if ((value = strchr(argv[i], '=')) != NULL) { /* format: set_param a=b */ *value = '\0'; value ++; path = argv[i]; if (*value == '\0') break; } else { /* format: set_param a b */ if (path == NULL) { path = argv[i]; continue; } else { value = argv[i]; } } clean_path(path); lprocfs_param_pattern(argv[0], path, pattern, sizeof(pattern)); rc2 = setparam_display(&popt, pattern, value); path = NULL; value = NULL; if (rc2 < 0 && rc == 0) rc = rc2; } if (path != NULL && (value == NULL || *value == '\0')) fprintf(stderr, "error: %s: setting %s=: %s\n", jt_cmdname(argv[0]), path, strerror(rc = EINVAL)); return rc; }
int jt_lcfg_setparam(int argc, char **argv) { int rc = 0, index, i; struct param_opts popt; char *path = NULL, *value = NULL; memset(&popt, 0, sizeof(popt)); index = setparam_cmdline(argc, argv, &popt); if (index < 0 || index >= argc) return CMD_HELP; if (popt.po_params2) /* We can't delete parameters that were * set with old conf_param interface */ return jt_lcfg_mgsparam2(argc, argv, &popt); for (i = index; i < argc; i++) { int rc2; path = NULL; value = strchr(argv[i], '='); if (value != NULL) { /* format: set_param a=b */ *value = '\0'; value++; path = argv[i]; if (*value == '\0') { fprintf(stderr, "error: %s: setting %s: no value\n", jt_cmdname(argv[0]), path); if (rc == 0) rc = -EINVAL; continue; } } else { /* format: set_param a b */ path = argv[i]; i++; if (i >= argc) { fprintf(stderr, "error: %s: setting %s: no value\n", jt_cmdname(argv[0]), path); if (rc == 0) rc = -EINVAL; break; } else { value = argv[i]; } } rc2 = clean_path(&popt, path); if (rc2 < 0) { fprintf(stderr, "error: %s: cleaning %s: %s\n", jt_cmdname(argv[0]), path, strerror(-rc2)); if (rc == 0) rc = rc2; continue; } /* A value containing '=' is indicative of user error, e.g.: * lctl set_param param1 param2=value2 * lctl set_param param1=param2=value2 */ if (strchr(value, '=') != NULL) fprintf(stderr, "warning: %s: value '%s' contains '='\n", jt_cmdname(argv[0]), value); rc2 = param_display(&popt, path, value, SET_PARAM); if (rc == 0) rc = rc2; } return rc; }