]> gitweb.hhaalo.de Git - discspan.git/commitdiff
add: check input parameter
authorBastian Dehn <hhaalo@arcor.de>
Sun, 8 Aug 2021 07:07:18 +0000 (09:07 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 8 Aug 2021 07:07:18 +0000 (09:07 +0200)
discspan.c
help.c
readme.md

index a5619d627a26a5dc3ce087e61b9e1b7461d3a0b1..19e8afd83208da69c7e90a01912012d5f28505f4 100644 (file)
@@ -12,9 +12,15 @@ extern void run(const char *input,
                const char *output,
                unsigned long long split);
 
-const unsigned long long readArgument(int argc, char *argv[])
+typedef struct {
+       char *input;
+       char *output;
+       unsigned long long split;
+} param_t;
+
+param_t readArgument(int argc, char *argv[])
 {
-       unsigned long long split = 0;
+       param_t parameter = { NULL, NULL, 0 };
 
        // Medien groessen
        const unsigned long long bluray = 24159191040;
@@ -23,30 +29,37 @@ const unsigned long long readArgument(int argc, char *argv[])
        const unsigned long long cd = 734003200;
 
        int c = 0;
-       while ((c = getopt(argc, argv, ":59bcf:")) != -1) {
+       while ((c = getopt(argc, argv, ":59bcf:i:o:")) != -1) {
                switch (c) {
+               case 'i':
+                       parameter.input = optarg;
+                       break;
+               case 'o':
+                       parameter.output = optarg;
+                       break;
                case '5':
-                       split = dvd5;
+                       parameter.split = dvd5;
                        break;
                case '9':
-                       split = dvd9;
+                       parameter.split = dvd9;
                        break;
                case 'b':
-                       split = bluray;
+                       parameter.split = bluray;
                        break;
                case 'c':
-                       split = cd;
+                       parameter.split = cd;
                        break;
                case 'f':
-                       split = atoll(optarg);
+                       parameter.split = atoll(optarg);
                        break;
                case 'h':
+               default:
                        usage();
                        break;
                }
        }
 
-       return split;
+       return parameter;
 }
 
 void print_human_read_size(const char *output, medium_t medium)
@@ -70,17 +83,22 @@ void print_human_read_size(const char *output, medium_t medium)
 
 int main(int argc, char *argv[])
 {
-       if (argc <= 3) {
+       param_t parameter = readArgument(argc, argv);
+
+       if (parameter.input == NULL
+                       || parameter.output == NULL
+                       || parameter.split < 2048) {
                usage();
-               return 1;
+               exit(1);
        }
 
-       const char *input = argv[1];
-       const char *output = argv[2];
-       const unsigned long long split = readArgument(argc, argv);
+       if (access(parameter.input, F_OK) < 0) {
+               printf("ERROR: %s existiert nicht!\n", parameter.input);
+               exit(1);
+       }
 
        status_print = print_human_read_size;
-       run(input, output, split);
+       run(parameter.input, parameter.output, parameter.split);
 
        return 0;
 }
diff --git a/help.c b/help.c
index 661e758b128a842ddf43a841b47ba6088d443d3d..f1f3c958cace5e8e83385b30b2785d929663a2e9 100644 (file)
--- a/help.c
+++ b/help.c
@@ -3,18 +3,20 @@
 
 void usage()
 {
-       printf("\nUsage: discspan <input> <output> <option>\n\n");
-       printf(" <input>\tTextdatei enthält alle Dateipfade,\n");
+       printf("\nUsage: discspan <option> -i <inputfile> -o <outputprefix>\n\n");
+       printf(" <inputfile>\tTextdatei enthält alle Dateipfade,\n");
        printf("\t\tdie auf den Datenträger sollen\n");
-       printf(" <output>\tTextdatei enthält alle Dateipfade,\n");
+       printf(" <outputprefix>\tTextdateien enthält alle Dateipfade,\n");
        printf("\t\tdie auf den Datenträger passen\n\n");
        printf(" option:\n");
+       printf("   -i <inputfile>\t\tPfad zur Quelldatei\n");
+       printf("   -o <outputprefix>\t\tPrefix der Ausgabedateien\n");
        printf("   -b\t\tEntspricht der Größe einer BluRay: 25.000.000.000\n");
        printf("   -9\t\tEntspricht der Größe einer Double Layer DVD: ");
        printf("8.500.000.000 Bytes\n");
        printf("   -5\t\tEntspricht der Größe einer Single Layer DVD: ");
        printf("4.700.000.000 Bytes\n");
        printf("   -c\t\tEntspricht der Größe einer CD: 734.003.200 Bytes\n");
-       printf("   -f <Größe>\tOption zur Größenangabe in Bytes\n");
+       printf("   -f <size>\tOption zur Größenangabe in Bytes\n");
        printf("   -h\t\tZeigt diese Hilfe an.\n\n");
 }
index 0e2953d6f2a76a3702a9f9344f40ce3b7cb5f7c4..88f975998dcd6b2fb79a661d28302d0a0d3b7a6b 100644 (file)
--- a/readme.md
+++ b/readme.md
@@ -21,7 +21,7 @@ make install
 
 2. discspan ausführen, um die Dateien auf ein DVD5 aufzuteilen
 
-       discspan testfile medium -5
+       discspan -i testfile -o medium -5
 
 3. Dateien herauskopieren mit rsync
 
@@ -31,22 +31,6 @@ make install
 
        cat medium | xargs -i cp -rl --parents {} /pfad/zum/wegkopieren
 
-## Command Line Options
-
-```console
-Usage: discspan <input> <output> <option>
-
- <input>       Textdatei enthält alle Dateipfade,
-               die auf den Datenträger sollen
- <output>      Textdatei enthält alle Dateipfade,
-               die auf den Datenträger passen
-
- option:
-   -9          Entspricht der Größe einer Double Layer DVD: 8.497.902.848 Bytes
-   -5          Entspricht der Größe einer Single Layer DVD: 4.697.902.848 Bytes
-   -c          Entspricht der Größe einer CD: 734.003.200 Bytes
-   -f <Größe>        Option zur Größenangabe in Bytes
-```
 
 ## Lizenz