1 /***
2 *
3 */
4 package com.fernsroth.squashfs;
5
6 import java.io.File;
7 import java.io.FileInputStream;
8 import java.util.Arrays;
9 import java.util.LinkedList;
10 import java.util.Queue;
11
12 import com.fernsroth.easyio.EasyIORandomAccessFile;
13 import com.fernsroth.squashfs.model.Manifest;
14
15 /***
16 *
17 * @author Joseph M. Ferner (Near Infinity Corporation)
18 */
19 public final class Squashfs {
20
21 /***
22 * hide constructor.
23 */
24 private Squashfs() {
25
26 }
27
28 /***
29 * main entry point.
30 * @param args the command line arguments.
31 * @throws Exception
32 */
33 public static void main(String args[]) throws Exception {
34
35 Queue<String> argQueue = new LinkedList<String>(Arrays.asList(args));
36
37 if (argQueue.isEmpty()) {
38 printUsage("source is required");
39 return;
40 }
41 String source = argQueue.remove();
42 if (argQueue.isEmpty()) {
43 printUsage("destination is required");
44 return;
45 }
46 String dest = argQueue.remove();
47
48 while (argQueue.size() > 1) {
49 {
50 printUsage("invalid command line argument '" + argQueue.peek()
51 + "'");
52 return;
53 }
54 }
55
56 File sourceFile = new File(source);
57 File sourceDir = sourceFile.getParentFile();
58 Manifest manifest = SquashFSManifest.load(new FileInputStream(
59 sourceFile), sourceDir);
60 SquashFSWriter writer = new SquashFSWriter(manifest,
61 new FileSystemDataProvider(sourceDir));
62 File destFile = new File(dest);
63 EasyIORandomAccessFile randDest = new EasyIORandomAccessFile(destFile,
64 "rw");
65 writer.write(randDest);
66 }
67
68 /***
69 * prints the usage.
70 * @param message the message to print in the help.
71 */
72 private static void printUsage(String message) {
73 if (message != null) {
74 System.err.println(message);
75 }
76 System.err.println("SYNTAX: " + Squashfs.class.getName()
77 + " source destination [options]");
78 }
79
80 }