patches/aria2-02-main.diff
author jurikm
Sun, 12 Feb 2012 14:04:10 +0000
changeset 8245 383896da4129
parent 84 1fed9192ba27
permissions -rw-r--r--
SFEsauerbraten.spec: add IPS package name
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
84
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
     1
--- aria2-0.9.0/src/main.cc.orig2	2006-12-12 15:19:39.816899000 +0800
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
     2
+++ aria2-0.9.0/src/main.cc	2006-12-19 16:32:55.069763000 +0800
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
     3
@@ -52,9 +52,14 @@
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
     4
 #include <unistd.h>
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
     5
 #include <libgen.h>
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
     6
 #include <utility>
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
     7
+#include <sys/types.h>
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
     8
+#include <sys/stat.h>
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
     9
+#include <fcntl.h>
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    10
 extern char* optarg;
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    11
 extern int optind, opterr, optopt;
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    12
 #include <getopt.h>
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    13
+#include <vector>
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    14
+#include <iterator>
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    15
 
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    16
 #ifdef ENABLE_METALINK
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    17
 #include "MetalinkRequestInfo.h"
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    18
@@ -74,6 +79,40 @@
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    19
 
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    20
 bool timeoutSpecified;
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    21
 
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    22
+int daemon( int nochdir, int noclose )
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    23
+{
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    24
+  int fd;
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    25
+
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    26
+  switch (fork()) {
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    27
+    case -1:
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    28
+      return(-1);
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    29
+    case 0:
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    30
+      break;
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    31
+    default:
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    32
+      _exit(0);
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    33
+  }
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    34
+
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    35
+  if (setsid() == -1)
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    36
+    return(-1);
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    37
+
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    38
+  /* Make certain we are not a session leader, or else we
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    39
+   * might reacquire a controlling terminal */
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    40
+  if (fork())
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    41
+    _exit(0);
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    42
+
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    43
+  if (!nochdir)
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    44
+    chdir("/");
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    45
+
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    46
+  if (!noclose && (fd = open("/dev/null", O_RDWR, 0)) != -1) {
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    47
+    dup2(fd, STDIN_FILENO);
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    48
+    dup2(fd, STDOUT_FILENO);
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    49
+    dup2(fd, STDERR_FILENO);
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    50
+    if (fd > 2)
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    51
+    close(fd);
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    52
+  }
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    53
+  return(0);
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    54
+}
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    55
+
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    56
 void setSignalHander(int signal, void (*handler)(int), int flags) {
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    57
   struct sigaction sigact;
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    58
   sigact.sa_handler = handler;
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    59
@@ -708,7 +747,13 @@
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    60
       exit(EXIT_FAILURE);
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    61
     }
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    62
   }
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    63
-  Strings args(argv+optind, argv+argc);
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    64
+
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    65
+  vector<string> V_argv;
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    66
+  for ( int i=0; i<argc; i++){
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    67
+    V_argv.insert(V_argv.begin(), argv[i]);
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    68
+  }
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    69
+  
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    70
+  Strings args(V_argv.begin()+optind, V_argv.end());
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    71
   
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    72
 #ifdef HAVE_LIBSSL
1fed9192ba27 * SFEaria.spec, linux-specs/aria2.spec:
nonsea
parents:
diff changeset
    73
   // for SSL initialization