Changeset 68e357e in mainline for uspace/app/hrctl/hrctl.c
- Timestamp:
- 2024-09-05T20:54:51Z (11 months ago)
- Children:
- 44ea48e
- Parents:
- 680e8c8
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/hrctl/hrctl.c
r680e8c8 r68e357e 82 82 } 83 83 84 static errno_t get_dev_svc_ids(int argc, char **argv, int optind, int dev_no,85 service_id_t **rdevs)84 static errno_t fill_config_devs(int argc, char **argv, int optind, 85 hr_config_t *cfg) 86 86 { 87 87 errno_t rc; 88 int i; 89 size_t k; 90 service_id_t *devs; 91 92 devs = calloc(dev_no, sizeof(service_id_t)); 93 if (devs == NULL) 94 return ENOMEM; 95 96 for (i = optind, k = 0; i < argc; i++, k++) { 97 rc = loc_service_get_id(argv[i], &devs[k], 0); 88 size_t i; 89 90 for (i = 0; i < cfg->dev_no; i++) { 91 rc = loc_service_get_id(argv[optind++], &cfg->devs[i], 0); 98 92 if (rc != EOK) { 99 93 printf("hrctl: error resolving device \"%s\"\n", argv[i]); 100 free(devs);101 94 return EINVAL; 102 95 } 103 96 } 104 105 *rdevs = devs;106 97 107 98 return EOK; … … 111 102 { 112 103 errno_t rc; 113 int retval, c , dev_no;104 int retval, c; 114 105 bool create, assemble; 115 char *name = NULL;116 service_id_t *devs = NULL;117 106 hr_t *hr; 118 hr_config_t hr_config; 119 hr_level_t level; 107 hr_config_t *cfg; 108 109 cfg = calloc(1, sizeof(hr_config_t)); 110 if (cfg == NULL) 111 return 1; 120 112 121 113 retval = 0; 122 level = hr_l_empty;123 dev_no = 0;114 cfg->level = hr_l_empty; 115 cfg->dev_no = 0; 124 116 create = assemble = false; 125 117 … … 143 135 return 0; 144 136 case 'a': 145 name = optarg; 137 if (str_size(optarg) > 31) { 138 printf("hrctl: device name longer than 31 bytes\n"); 139 return 1; 140 } 141 str_cpy(cfg->devname, 32, optarg); 146 142 assemble = true; 147 143 break; 148 144 case 'c': 149 name = optarg; 145 if (str_size(optarg) > 31) { 146 printf("hrctl: device name longer than 31 bytes\n"); 147 return 1; 148 } 149 str_cpy(cfg->devname, 32, optarg); 150 150 create = true; 151 151 break; 152 152 case 'l': 153 if ( level != hr_l_empty)153 if (cfg->level != hr_l_empty) 154 154 goto bad; 155 155 if (str_cmp(optarg, "linear") == 0) 156 level = hr_l_linear;156 cfg->level = hr_l_linear; 157 157 else 158 level = strtol(optarg, NULL, 10);158 cfg->level = strtol(optarg, NULL, 10); 159 159 break; 160 160 case '0': 161 if ( level != hr_l_empty)162 goto bad; 163 level = hr_l_0;161 if (cfg->level != hr_l_empty) 162 goto bad; 163 cfg->level = hr_l_0; 164 164 break; 165 165 case '1': 166 if ( level != hr_l_empty)167 goto bad; 168 level = hr_l_1;166 if (cfg->level != hr_l_empty) 167 goto bad; 168 cfg->level = hr_l_1; 169 169 break; 170 170 case '5': 171 if ( level != hr_l_empty)172 goto bad; 173 level = hr_l_5;171 if (cfg->level != hr_l_empty) 172 goto bad; 173 cfg->level = hr_l_5; 174 174 break; 175 175 case 'L': 176 if ( level != hr_l_empty)177 goto bad; 178 level = hr_l_linear;176 if (cfg->level != hr_l_empty) 177 goto bad; 178 cfg->level = hr_l_linear; 179 179 break; 180 180 case 'n': 181 dev_no = strtol(optarg, NULL, 10); 182 if (dev_no + optind != argc) 183 goto bad; 184 rc = get_dev_svc_ids(argc, argv, optind, dev_no, &devs); 181 cfg->dev_no = strtol(optarg, NULL, 10); 182 if ((int) cfg->dev_no + optind != argc) 183 goto bad; 184 if (cfg->dev_no > HR_MAXDEVS) { 185 printf("hrctl: too many devices\n"); 186 return 1; 187 } 188 rc = fill_config_devs(argc, argv, optind, cfg); 185 189 if (rc != EOK) 186 190 return 1; … … 191 195 if ((create && assemble) || 192 196 (!create && !assemble) || 193 (create && level == hr_l_empty) || 194 (assemble && level != hr_l_empty) || 195 (dev_no == 0)) { 196 free(devs); 197 (create && cfg->level == hr_l_empty) || 198 (assemble && cfg->level != hr_l_empty) || 199 (cfg->dev_no == 0)) { 197 200 goto bad; 198 201 } 199 200 hr_config.level = level;201 hr_config.dev_no = dev_no;202 hr_config.name = name;203 hr_config.devs = devs;204 202 205 203 rc = hr_sess_init(&hr); … … 211 209 212 210 if (create) { 213 rc = hr_create(hr, &hr_config);211 rc = hr_create(hr, cfg); 214 212 printf("hrctl: hr_create() rc: %s\n", str_error(rc)); 215 213 } else if (assemble) { … … 218 216 219 217 end: 220 free( devs);218 free(cfg); 221 219 hr_sess_destroy(hr); 222 220 return retval; 223 221 bad: 222 free(cfg); 224 223 printf("hrctl: bad usage, try hrctl --help\n"); 225 224 return 1;
Note:
See TracChangeset
for help on using the changeset viewer.