-static void do_dir_entry(struct vc_set_sched *sched, const char *name)
-{
- int fd;
- char buf[128];
- signed long val;
- struct sched_opt *opt;
- ssize_t len;
- char *newline;
-
- for (opt = FILE_OPTIONS; opt->name != 0; opt++) {
- if (strcmp(name, opt->name) == 0)
- break;
- }
- if (opt->name == 0)
- return;
-
- fd = Eopen(name, O_RDONLY, 0);
- len = Eread(fd, buf, sizeof(buf)-1);
- Eclose(fd);
- buf[len] = '\0';
- if ((newline=strchr(buf, '\n')) != NULL)
- *newline = '\0';
-
- if (!isNumber(buf, &val, true)) {
- WRITE_MSG(2, ENSC_WRAPPERS_PREFIX);
- WRITE_STR(2, name);
- WRITE_MSG(2, ": is not a number\n");
- exit(1);
- }
-
- if (opt->offset != offsetof(struct vc_set_sched, set_mask))
- *(int_least32_t *)(((char *)sched)+opt->offset) = (int_least32_t) val;
-
- sched->set_mask |= opt->mask;
-}
-
-static void do_dir(xid_t xid, struct vc_set_sched *sched, const char *dir, int missing_ok, int per_cpu)
-{
- DIR *dp;
- struct dirent *de;
- int cur_fd = Eopen(".", O_RDONLY, 0);
- struct stat st;
-
- if (chdir(dir)!=-1) {
- dp = Eopendir(".");
- while ((de = Ereaddir(dp)) != NULL) {
- if (de->d_name[0] == '.' && (de->d_name[1] == '\0' || (de->d_name[1] == '.' && de->d_name[2] == '\0')))
- continue;
- Estat(de->d_name, &st);
- if (S_ISDIR(st.st_mode))
- continue;
- do_dir_entry(sched, de->d_name);
- }
-
- /* set the values now */
- if (vc_set_sched(xid, sched) == -1) {
- perror(ENSC_WRAPPERS_PREFIX "vc_set_sched()");
- exit(1);
- }
-
- if (!per_cpu) {
- struct vc_set_sched per_cpu_sched;
-
- rewinddir(dp);
- while ((de = Ereaddir(dp)) != NULL) {
- if (de->d_name[0] == '.' && (de->d_name[1] == '\0' || (de->d_name[1] == '.' && de->d_name[2] == '\0')))
- continue;
- Estat(de->d_name, &st);
- if (S_ISDIR(st.st_mode)) {
- per_cpu_sched.set_mask = sched->set_mask & (VC_VXSM_IDLE_TIME|VC_VXSM_FORCE);
- do_dir(xid, &per_cpu_sched, de->d_name, 0, 1);
- }
- }
- }
-
- Eclosedir(dp);
- }
- else if (!missing_ok) {
- perror(ENSC_WRAPPERS_PREFIX "chdir()");
- exit(wrapper_exit_code);
- }
-
- Efchdir(cur_fd);
-}
-