| --- a/src/main.cpp |
| +++ b/src/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) |