50a6b799cc7ed6a834283cedfbc29aada498c169
[pintos-anon] / grading / vm / prep-disk
1 #! /usr/bin/perl -w
2
3 use strict;
4 use Getopt::Long;
5 use POSIX;
6
7 my ($pintos) = "pintos";
8 my ($os_disk) = "../../src/userprog/build/os.dsk";
9 my ($fs_disk);
10
11 GetOptions ("os-disk=s" => \$os_disk,
12             "fs-disk=s" => \$fs_disk,
13             "help" => sub { usage (0) })
14     or die "option parsing failed; use --help for help\n";
15
16 if (!defined $fs_disk) {
17     die "output disk name expected; use --help for help\n"
18         if @ARGV < 1;
19     $fs_disk = shift @ARGV;
20 }
21
22 if (! -e $os_disk) {
23     print STDERR "$os_disk: stat: $!\n";
24     print STDERR "perhaps you should `make' in ../../src/userprog?\n";
25     exit 1;
26 }
27
28 our ($formatted) = 0;
29
30 unlink $fs_disk;
31 xsystem ("$pintos make-disk '$fs_disk' 2");
32 while (@ARGV) {
33     put_file (shift (@ARGV));
34 }
35
36 sub put_file {
37     my ($fn) = @_;
38     my ($cmd) = "$pintos -v --os-disk='$os_disk' --fs-disk='$fs_disk' put";
39     $cmd .= " -f", $formatted = 1 if !$formatted;
40     $cmd .= " '$fn'";
41     xsystem ($cmd);
42 }
43
44 sub xsystem {
45     my ($cmd) = @_;
46     print "$cmd\n";
47     system ($cmd) == 0 or die "command failed\n";
48 }