+++ /dev/null
---- 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)