4a69d84eb00901728252fb5088b608f52c23a250
[pintos-anon] / grading / userprog / multi-recurse.c
1 #include <debug.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <syscall.h>
5
6 int
7 main (int argc UNUSED, char *argv[]) 
8 {
9   int n = atoi (argv[1]);
10   if (n == 0)
11     n = atoi (argv[0]);
12     
13   printf ("(multi-recurse) begin %d\n", n);
14   if (n != 0) 
15     {
16       char child_cmd[128];
17       pid_t child_pid;
18       
19       snprintf (child_cmd, sizeof child_cmd, "multi-recurse %d", n - 1);
20       child_pid = exec (child_cmd);
21       if (child_pid != -1) 
22         {
23           int code = wait (child_pid);
24           if (code != n - 1)
25             printf ("(multi-recurse) fail: wait(exec(\"%s\")) returned %d\n",
26                     child_cmd, code);
27         }
28       else
29         printf ("(multi-recurse) fail: exec(\"%s\") returned -1\n", child_cmd);
30     }
31   
32   printf ("(multi-recurse) end %d\n", n);
33   return n;
34 }