--- a/src/main.cpp +++ b/src/main.cpp @@ -4,11 +4,14 @@ * https://tsdemuxer.googlecode.com/svn/trunk/xupnpd */ +#include #include #include #include #include #include +#include +#include #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)