--- 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)
|