Changeset 143


Ignore:
Timestamp:
08/31/10 13:29:19 (9 years ago)
Author:
jls17
Message:
  • removed copyright output
  • changed cmdline-args-check to support empty args (like: -p "")
  • server name is just required in server-mode (file mode doesn't need it)
  • default value of TargetFolder? setting removed to stop the program if a invalid ini-file is specified (#64);
  • in case the TargetFolder? points to the root directory, the program stops;
  • CMakeLists.txt for linux builds added
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Main.cpp

    r137 r143  
    5555        int rpc = 0; 
    5656 
    57         cout << "ARInside Version " << AppVersion << endl; 
    58         cout << "Copyright (c) 2009 Stefan Nerlich" << endl << endl; 
     57        cout << "ARInside Version " << AppVersion << endl << endl; 
    5958 
    6059        CmdLine cmd("ARInside -- http://arinside.org", ' ', AppVersion); 
     
    104103 
    105104                // override settings with values specified by the command line  
    106                 if (!server.empty() || appConfig.serverName.empty()) 
     105                if (serverArg.isSet()) 
    107106                        appConfig.serverName = server; 
    108107 
    109                 if (!output.empty() || appConfig.targetFolder.empty()) 
     108                if (outputFolder.isSet()) 
    110109                        appConfig.targetFolder = output; 
    111110 
    112                 if (!login.empty() || appConfig.userName.empty()) 
     111                if (loginArg.isSet()) 
    113112                        appConfig.userName = login; 
    114113 
    115                 if (!pwd.empty() || appConfig.password.empty()) 
     114                if (pwdArg.isSet()) 
    116115                        appConfig.password = pwd; 
    117116 
    118                 if (tcp > 0) 
     117                if (tcpArg.isSet()) 
    119118                        appConfig.tcpPort = tcp; 
    120119 
    121                 if (rpc > 0) 
     120                if (rpcArg.isSet()) 
    122121                        appConfig.rpcPort = rpc; 
    123122 
     
    128127                        unsigned int missingCount = 0; 
    129128 
    130                         if (appConfig.serverName.empty()) 
     129                        if (!appConfig.fileMode && appConfig.serverName.empty()) 
    131130                        { 
    132131                                missingCount++; 
     
    152151                } 
    153152 
     153                // validate the path of the target folder 
     154                if (appConfig.targetFolder.empty()) 
     155                { 
     156                        cout << "[ERR] Target folder setting is missing or not setup correctly!" << endl; 
     157                        throw ExitException(1); 
     158                } 
     159                 
     160                string fullOutputPath = CWindowsUtil::GetRealPathName(appConfig.targetFolder); 
     161                if (CUtil::StrEndsWith(fullOutputPath, ":\\") || CUtil::StrEndsWith(fullOutputPath, ":/") || fullOutputPath == "/") 
     162                { 
     163                        cout << "[ERR] The target directory points to the root of the device. This is not allowed!" << endl; 
     164                        throw ExitException(1); 
     165                } 
     166 
    154167                CWindowsUtil winUtil(appConfig);                 
    155                 CARInside arInside(appConfig);; 
     168                CARInside arInside(appConfig); 
    156169 
    157170                //Delete existing files 
     
    163176 
    164177                //Create the target directory specified in the configuration files 
     178                //TODO: CreateAppDirectory returns false if the directory already exists .. this should be changed so 
     179                //      we can check if there is something going wrong and stop the process!! 
    165180                winUtil.CreateAppDirectory(); 
    166181 
     
    214229                else 
    215230                { 
     231                        // TODO: ValidateTargetDir returns 0 on success. On error there is no information about the error 
     232                        // at all .. only "whoops, cant create directory" .. hell yes, and now? where is my glass sphere... 
    216233                        cout << "Failed to create target directory: " << appConfig.targetFolder << endl; 
    217234                        result = AR_RETURN_ERROR; 
     
    238255        catch(AppException &e) 
    239256        { 
    240                 cout << endl << "AppException: " << e.typeDescription() << endl << "Description: " << e.error();         
     257                cout << endl << "AppException: " << e.typeDescription() << endl << "Description: " << e.error() << endl;         
    241258        } 
    242259        catch (ArgException &e) 
     
    272289                config.readInto<string>(cfg.companyName, "CompanyName", ""); 
    273290                config.readInto<string>(cfg.companyUrl, "CompanyUrl", ""); 
    274                 config.readInto<string>(cfg.targetFolder, "TargetFolder", "DefaultOutputFolder"); 
     291                config.readInto<string>(cfg.targetFolder, "TargetFolder", ""); 
    275292                config.readInto<bool>(cfg.fileMode, "FileMode", false); 
    276293                config.readInto<string>(cfg.objListXML, "ObjListXML", ""); 
  • trunk/WindowsUtil.cpp

    r137 r143  
    1818#include "resource.h" 
    1919#include "WindowsUtil.h" 
     20#include "AppException.h" 
    2021 
    2122#include <sys/types.h> 
     
    2526#include <windows.h> 
    2627#include <direct.h> 
     28#else 
     29#include <errno.h> 
    2730#endif // WIN32 
    2831 
     
    206209        return 0; 
    207210} 
     211 
     212string CWindowsUtil::GetRealPathName(const std::string &path) 
     213{ 
     214#ifdef WIN32 
     215        char buffer[MAX_PATH]; buffer[0] = 0; 
     216        LPSTR *filePos = NULL; 
     217 
     218        DWORD len = GetFullPathName(path.c_str(), MAX_PATH, buffer, filePos); 
     219        if (len > MAX_PATH || len == 0) 
     220        { 
     221                stringstream tmp; 
     222                tmp << "Error: could not retrieve the full output path! (" << GetLastError() << ")"; 
     223                throw AppException(tmp.str(), "filesystem");                     
     224        } 
     225#else 
     226        // NOTE: realpath doesn't return the full path under SunOS if a relativ path is specified. 
     227        char buffer[PATH_MAX]; buffer[0] = 0; 
     228        char *p; 
     229        p = realpath(path.c_str(), buffer); 
     230        if (p == NULL) 
     231        { 
     232                if (errno == ENOENT) return path; 
     233                stringstream tmp; 
     234                tmp << strerror(errno) << ": " << path; 
     235                throw AppException(tmp.str(), "filesystem");                     
     236        } 
     237#endif 
     238        return buffer; 
     239} 
  • trunk/WindowsUtil.h

    r137 r143  
    2727        bool CreateAppDirectory(); 
    2828        int CreateSubDirectory(string name); 
     29        static std::string GetRealPathName(const std::string &path); 
    2930 
    3031private: 
  • trunk/stdafx.h

    r133 r143  
    2626#include <time.h> 
    2727#include <stdlib.h> // JLS17_LINUX 
     28#include <stdio.h> 
    2829 
    2930#include "util/Util.h" 
  • trunk/util/Util.cpp

    r94 r143  
    151151        return buffer; 
    152152} 
     153 
     154bool CUtil::StrEndsWith(const std::string &str, const std::string &search) 
     155{ 
     156        if (search.size() > str.size()) return false; 
     157        return equal(str.end() - search.size(), str.end(), search.begin()); 
     158} 
  • trunk/util/Util.h

    r86 r143  
    4141        static string String2Comp(string strIn); 
    4242        static string StrReplace(const std::string &search, const std::string &replace, std::string searchin); 
     43        static bool StrEndsWith(const std::string &str, const std::string &search); 
    4344        //static int SplitString(const string& input, const string& delimiter, vector<string>& results, bool includeEmpties);    
    4445 
Note: See TracChangeset for help on using the changeset viewer.