diff options
Diffstat (limited to 'cpp/src/IcePatch2/Calc.cpp')
-rw-r--r-- | cpp/src/IcePatch2/Calc.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/cpp/src/IcePatch2/Calc.cpp b/cpp/src/IcePatch2/Calc.cpp new file mode 100644 index 00000000000..4a98f1b6c09 --- /dev/null +++ b/cpp/src/IcePatch2/Calc.cpp @@ -0,0 +1,124 @@ +// ********************************************************************** +// +// Copyright (c) 2004 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <IcePatch2/Util.h> + +using namespace std; +using namespace Ice; +using namespace IcePatch2; + +void +usage(const char* appName) +{ + cerr << "Usage: " << appName << " [options] DIR\n"; + cerr << + "Options:\n" + "-h, --help Show this message.\n" + "-v, --version Display the Ice version.\n" + "-z, --bzip2 Compress files.\n" + "-V, --verbose Verbose mode.\n" + ; +} + +int +main(int argc, char* argv[]) +{ + string dataDir; + bool compress = false; + bool verbose = false; + + int i; + for(i = 1; i < argc; ++i) + { + if(strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) + { + usage(argv[0]); + return EXIT_SUCCESS; + } + else if(strcmp(argv[i], "-v") == 0 || strcmp(argv[i], "--version") == 0) + { + cout << ICE_STRING_VERSION << endl; + return EXIT_SUCCESS; + } + else if(strcmp(argv[i], "-z") == 0 || strcmp(argv[i], "--bzip2") == 0) + { + compress = true; + } + else if(strcmp(argv[i], "-V") == 0 || strcmp(argv[i], "--verbose") == 0) + { + verbose = true; + } + else if(argv[i][0] == '-') + { + cerr << argv[0] << ": unknown option `" << argv[i] << "'" << endl; + usage(argv[0]); + return EXIT_FAILURE; + } + else + { + if(dataDir.empty()) + { + dataDir = argv[i]; + } + else + { + cerr << argv[0] << ": too many arguments" << endl; + usage(argv[0]); + return EXIT_FAILURE; + } + } + } + + if(dataDir.empty()) + { + cerr << argv[0] << ": no data directory specified" << endl; + usage(argv[0]); + return EXIT_FAILURE; + } + + try + { +#ifdef _WIN32 + char cwd[_MAX_PATH]; + if(_getcwd(cwd, _MAX_PATH) == NULL) +#else + char cwd[PATH_MAX]; + if(getcwd(cwd, PATH_MAX) == NULL) +#endif + { + throw string("cannot get the current directory: ") + strerror(errno); + } + + dataDir = normalize(string(cwd) + '/' + dataDir); + + if(chdir(dataDir.c_str()) == -1) + { + throw "cannot change directory to `" + dataDir + "': " + strerror(errno); + } + + FileInfoSeq infoSeq; + getFileInfoSeq(".", infoSeq, compress, verbose); + + sort(infoSeq.begin(), infoSeq.end(), FileInfoCompare()); + + saveFileInfoSeq(dataDir + ".sum", infoSeq); + } + catch(const string& ex) + { + cerr << argv[0] << ": " << ex << endl; + return EXIT_FAILURE; + } + catch(const char* ex) + { + cerr << argv[0] << ": " << ex << endl; + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} |