diff options
| author | _ov4 <ov4@ov4.org> | 2026-09-02 12:27:37 +0000 |
|---|---|---|
| committer | _ov4 <ov4@ov4.org> | 2026-09-02 12:27:37 +0000 |
| commit | e96c26476310404fe61aad5d8eb4c21d79c28178 (patch) | |
| tree | f8099532ed0cda48bb44d2400ae025ce4a1a2c9d /src | |
| parent | a9c5dc21d3096a1791f28d022708cc1853e7c1af (diff) | |
job refactor
Diffstat (limited to 'src')
| -rw-r--r-- | src/command/jobs.cc | 2 | ||||
| -rw-r--r-- | src/eval.cc | 4 | ||||
| -rw-r--r-- | src/ground.cc | 8 | ||||
| -rw-r--r-- | src/handler.cc | 8 | ||||
| -rw-r--r-- | src/job.cc | 76 | ||||
| -rw-r--r-- | src/main.cc | 2 |
6 files changed, 50 insertions, 50 deletions
diff --git a/src/command/jobs.cc b/src/command/jobs.cc index ccdda75..18acc0e 100644 --- a/src/command/jobs.cc +++ b/src/command/jobs.cc @@ -9,7 +9,7 @@ using namespace ov4; void jobs(char **argv) { - listjobs(ov4::jobs); + listjobs(); } } diff --git a/src/eval.cc b/src/eval.cc index 0a73c0d..c4862d2 100644 --- a/src/eval.cc +++ b/src/eval.cc @@ -79,7 +79,7 @@ void eval(char *cmdline) if (!ground) // foreground { - addjob(jobs, pid, FG, cmdline); + addjob(pid, FG, cmdline); sigset_t prev_with_sigchld_blocked = prev; sigaddset(&prev_with_sigchld_blocked, SIGCHLD); sigprocmask(SIG_SETMASK, &prev_with_sigchld_blocked, NULL); @@ -88,7 +88,7 @@ void eval(char *cmdline) } else // background { - addjob(jobs, pid, BG, cmdline); + addjob(pid, BG, cmdline); sigprocmask(SIG_SETMASK, &prev, NULL); cout << "[" << pid2jid(pid) << "] (" << pid << ") " << cmdline; } diff --git a/src/ground.cc b/src/ground.cc index 53f8652..e82fa94 100644 --- a/src/ground.cc +++ b/src/ground.cc @@ -17,8 +17,8 @@ void waitfg(pid_t pid) // get current blocked signals sigprocmask(0, nullptr, &prev_with_sigchld_unblocked); sigdelset(&prev_with_sigchld_unblocked, SIGCHLD); - LOG << "waiting for pid "<< fgpid(jobs) << endl; - while (fgpid(jobs) != 0) + LOG << "waiting for pid "<< fgpid() << endl; + while (fgpid() != 0) sigsuspend(&prev_with_sigchld_unblocked); // set shell to foreground again @@ -52,7 +52,7 @@ void do_bgfg(char **argv) return; } x = atoi(&argv[1][1]); // eat % - j = getjobjid(jobs, x); + j = getjobjid(x); if (j == nullptr) { cerr << argv[1] << ": No such job" << endl; @@ -65,7 +65,7 @@ void do_bgfg(char **argv) return; } x = atoi(&argv[1][0]); - j = getjobpid(jobs, x); + j = getjobpid(x); if (j == nullptr) { cerr << "(" << argv[1] << "): No such process" << endl; diff --git a/src/handler.cc b/src/handler.cc index a6945a3..60b41fa 100644 --- a/src/handler.cc +++ b/src/handler.cc @@ -98,7 +98,7 @@ void sigchld_handler(int sig) safe_debug("\n"); sigset_t prev_inner; block_all(&prev_inner); - job_suspend(jobs, pid); + job_suspend(pid); sigprocmask(SIG_SETMASK, &prev_inner, nullptr); } else { @@ -106,7 +106,7 @@ void sigchld_handler(int sig) safe_debug(pid); sigset_t prev_inner; block_all(&prev_inner); - deletejob(jobs, pid); + deletejob(pid); sigprocmask(SIG_SETMASK, &prev_inner, nullptr); } } @@ -129,7 +129,7 @@ void sigint_handler(int sig) sigset_t prev; block_handler(&prev); - int pid = fgpid(jobs); + int pid = fgpid(); if (pid != 0) { kill(-pid, SIGINT); @@ -157,7 +157,7 @@ void sigtstp_handler(int sig) sigset_t prev; block_handler(&prev); - int pid = fgpid(jobs); + int pid = fgpid(); if (pid != 0) { kill(-pid, SIGTSTP); @@ -3,7 +3,7 @@ namespace ov4 { -struct job_t jobs[MAXJOBS]; +struct job_t _jobs[MAXJOBS]; int nextjid = 1; void clearjob(struct job_t *job) { @@ -14,26 +14,26 @@ void clearjob(struct job_t *job) { } /* initjobs - Initialize the job list */ -void initjobs(struct job_t *jobs) { +void initjobs(struct job_t *job) { int i; for (i = 0; i < MAXJOBS; i++) - clearjob(&jobs[i]); + clearjob(&job[i]); } /* maxjid - Returns largest allocated job ID */ -int maxjid(struct job_t *jobs) +int maxjid(struct job_t *job) { int i, max=0; for (i = 0; i < MAXJOBS; i++) - if (jobs[i].jid > max) - max = jobs[i].jid; + if (job[i].jid > max) + max = job[i].jid; return max; } /* addjob - Add a job to the job list */ -int addjob(struct job_t *jobs, pid_t pid, int state, char *cmdline) +int addjob(pid_t pid, int state, char *cmdline, struct job_t *job) { int i; @@ -41,15 +41,15 @@ int addjob(struct job_t *jobs, pid_t pid, int state, char *cmdline) return 0; for (i = 0; i < MAXJOBS; i++) { - if (jobs[i].pid == 0) { - jobs[i].pid = pid; - jobs[i].state = state; - jobs[i].jid = nextjid++; + if (job[i].pid == 0) { + job[i].pid = pid; + job[i].state = state; + job[i].jid = nextjid++; if (nextjid > MAXJOBS) nextjid = 1; - strcpy(jobs[i].cmdline, cmdline); + strcpy(job[i].cmdline, cmdline); if(verbose){ - printf("Added job [%d] %d %s\n", jobs[i].jid, jobs[i].pid, jobs[i].cmdline); + printf("Added job [%d] %d %s\n", job[i].jid, job[i].pid, job[i].cmdline); } return 1; } @@ -59,7 +59,7 @@ int addjob(struct job_t *jobs, pid_t pid, int state, char *cmdline) } /* deletejob - Delete a job whose PID=pid from the job list */ -int deletejob(struct job_t *jobs, pid_t pid) +int deletejob(pid_t pid, struct job_t *job) { int i; @@ -67,9 +67,9 @@ int deletejob(struct job_t *jobs, pid_t pid) return 0; for (i = 0; i < MAXJOBS; i++) { - if (jobs[i].pid == pid) { - clearjob(&jobs[i]); - nextjid = maxjid(jobs)+1; + if (job[i].pid == pid) { + clearjob(&job[i]); + nextjid = maxjid(job)+1; return 1; } } @@ -77,63 +77,63 @@ int deletejob(struct job_t *jobs, pid_t pid) } /* fgpid - Return PID of current foreground job, 0 if no such job */ -pid_t fgpid(struct job_t *jobs) { +pid_t fgpid(struct job_t *job) { int i; for (i = 0; i < MAXJOBS; i++) - if (jobs[i].state == FG) - return jobs[i].pid; + if (job[i].state == FG) + return job[i].pid; return 0; } /* getjobpid - Find a job (by PID) on the job list */ -struct job_t *getjobpid(struct job_t *jobs, pid_t pid) { +struct job_t *getjobpid(pid_t pid, struct job_t *job) { int i; if (pid < 1) return NULL; for (i = 0; i < MAXJOBS; i++) - if (jobs[i].pid == pid) - return &jobs[i]; + if (job[i].pid == pid) + return &job[i]; return NULL; } /* getjobjid - Find a job (by JID) on the job list */ -struct job_t *getjobjid(struct job_t *jobs, int jid) +struct job_t *getjobjid(int jid, struct job_t *job) { int i; if (jid < 1) return NULL; for (i = 0; i < MAXJOBS; i++) - if (jobs[i].jid == jid) - return &jobs[i]; + if (job[i].jid == jid) + return &job[i]; return NULL; } /* pid2jid - Map process ID to job ID */ -int pid2jid(pid_t pid) +int pid2jid(pid_t pid, struct job_t *job) { int i; if (pid < 1) return 0; for (i = 0; i < MAXJOBS; i++) - if (jobs[i].pid == pid) { - return jobs[i].jid; + if (job[i].pid == pid) { + return job[i].jid; } return 0; } /* listjobs - Print the job list */ -void listjobs(struct job_t *jobs) +void listjobs(struct job_t *job) { int i; for (i = 0; i < MAXJOBS; i++) { - if (jobs[i].pid != 0) { - printf("[%d] (%d) ", jobs[i].jid, jobs[i].pid); - switch (jobs[i].state) { + if (job[i].pid != 0) { + printf("[%d] (%d) ", job[i].jid, job[i].pid); + switch (job[i].state) { case BG: printf("Running "); break; @@ -145,20 +145,20 @@ void listjobs(struct job_t *jobs) break; default: printf("listjobs: Internal error: job[%d].state=%d ", - i, jobs[i].state); + i, job[i].state); } - printf("%s", jobs[i].cmdline); + printf("%s", job[i].cmdline); } } } -bool job_suspend(struct job_t *jobs, pid_t pid) { +bool job_suspend(pid_t pid, struct job_t *job) { int i; for (i = 0; i < MAXJOBS; i++) - if (jobs[i].pid == pid) + if (job[i].pid == pid) { - jobs[i].state = ST; + job[i].state = ST; return true; } return false; diff --git a/src/main.cc b/src/main.cc index ed88912..05136f4 100644 --- a/src/main.cc +++ b/src/main.cc @@ -61,7 +61,7 @@ int main(int argc, char **argv) Signal(SIGQUIT, sigquit_handler); /* Initialize the job list */ - initjobs(jobs); + initjobs(); /* Execute the shell's read/eval loop */ while (1) { |
