68ea3e82e2c24a92897b0d1d0909569bf5180df1
[packages.git] / multimedia / xupnpd / patches / 101-root_dir_param.patch
1 --- a/main.cpp
2 +++ b/main.cpp
3 @@ -4,11 +4,14 @@
4   * https://tsdemuxer.googlecode.com/svn/trunk/xupnpd
5   */
6  
7 +#include <ctype.h>
8  #include <stdio.h>
9  #include <syslog.h>
10  #include <string.h>
11  #include <unistd.h>
12  #include <stdlib.h>
13 +#include <sys/stat.h>
14 +#include <sys/types.h>
15  #include "luacompat.h"
16  #include "luaxlib.h"
17  #include "luaxcore.h"
18 @@ -16,35 +19,36 @@
19  
20  int main(int argc,char** argv)
21  {
22 -    const char* p=strrchr(argv[0],'/');
23 -
24 -    int rc;
25 -
26 -    if(p)
27 -    {
28 -        char location[512];
29 -        int n=p-argv[0];
30 -        if(n>=sizeof(location))
31 -            n=sizeof(location)-1;
32 -        strncpy(location,argv[0],n);
33 -        location[n]=0;
34 -
35 -        rc=chdir(location);
36 -
37 -        argv[0]=(char*)p+1;
38 -    }
39 -
40 -    const char* root=getenv("XUPNPDROOTDIR");
41 -    if(root && *root)
42 -        rc=chdir(root);
43 -
44 -    {
45 -        FILE* fp=fopen("xupnpd.lua","r");
46 -        if(fp)
47 -            fclose(fp);
48 -        else
49 -            rc=chdir("/usr/share/xupnpd/");
50 -    }
51 +       int c;
52 +       char *xupnpd_root = "/usr/share/xupnpd/";
53 +       struct stat s;
54 +
55 +       opterr = 0;
56 +       while ((c = getopt (argc, argv, "d:")) != -1) {
57 +               switch (c) {
58 +                       case 'd':
59 +                               xupnpd_root = optarg;
60 +                               break;
61 +                       case '?':
62 +                               if (optopt == 'd')
63 +                                       fprintf(stderr, "Option -%c requires an argument.\n", optopt);
64 +                               else if (isprint(optopt))
65 +                                       fprintf(stderr, "Unknown option \"-%c\".\n", optopt);
66 +                               else
67 +                                       fprintf(stderr, "Unknown option\n");
68 +                                       return 1;
69 +                       default:
70 +                               abort();
71 +               }
72 +       }
73 +
74 +       if(stat(xupnpd_root, &s) != -1 && S_ISDIR(s.st_mode)) {
75 +               c = chdir(xupnpd_root);
76 +       }
77 +       else {
78 +               fprintf(stderr, "Directory %s doesn't exist.\n", xupnpd_root);
79 +               return 1;
80 +       }
81  
82      lua_State* L=lua_open();
83      if(L)