xupnpd: Update to latest version, switch to procd and add parameter for root directory
[packages.git] / multimedia / xupnpd / patches / 101-root_dir_param.patch
diff --git a/multimedia/xupnpd/patches/101-root_dir_param.patch b/multimedia/xupnpd/patches/101-root_dir_param.patch
new file mode 100644 (file)
index 0000000..68ea3e8
--- /dev/null
@@ -0,0 +1,83 @@
+--- a/main.cpp
++++ b/main.cpp
+@@ -4,11 +4,14 @@
+  * https://tsdemuxer.googlecode.com/svn/trunk/xupnpd
+  */
++#include <ctype.h>
+ #include <stdio.h>
+ #include <syslog.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include <stdlib.h>
++#include <sys/stat.h>
++#include <sys/types.h>
+ #include "luacompat.h"
+ #include "luaxlib.h"
+ #include "luaxcore.h"
+@@ -16,35 +19,36 @@
+ int main(int argc,char** argv)
+ {
+-    const char* p=strrchr(argv[0],'/');
+-
+-    int rc;
+-
+-    if(p)
+-    {
+-        char location[512];
+-        int n=p-argv[0];
+-        if(n>=sizeof(location))
+-            n=sizeof(location)-1;
+-        strncpy(location,argv[0],n);
+-        location[n]=0;
+-
+-        rc=chdir(location);
+-
+-        argv[0]=(char*)p+1;
+-    }
+-
+-    const char* root=getenv("XUPNPDROOTDIR");
+-    if(root && *root)
+-        rc=chdir(root);
+-
+-    {
+-        FILE* fp=fopen("xupnpd.lua","r");
+-        if(fp)
+-            fclose(fp);
+-        else
+-            rc=chdir("/usr/share/xupnpd/");
+-    }
++      int c;
++      char *xupnpd_root = "/usr/share/xupnpd/";
++      struct stat s;
++
++      opterr = 0;
++      while ((c = getopt (argc, argv, "d:")) != -1) {
++              switch (c) {
++                      case 'd':
++                              xupnpd_root = optarg;
++                              break;
++                      case '?':
++                              if (optopt == 'd')
++                                      fprintf(stderr, "Option -%c requires an argument.\n", optopt);
++                              else if (isprint(optopt))
++                                      fprintf(stderr, "Unknown option \"-%c\".\n", optopt);
++                              else
++                                      fprintf(stderr, "Unknown option\n");
++                                      return 1;
++                      default:
++                              abort();
++              }
++      }
++
++      if(stat(xupnpd_root, &s) != -1 && S_ISDIR(s.st_mode)) {
++              c = chdir(xupnpd_root);
++      }
++      else {
++              fprintf(stderr, "Directory %s doesn't exist.\n", xupnpd_root);
++              return 1;
++      }
+     lua_State* L=lua_open();
+     if(L)