summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Freeman (saurik) <saurik@saurik.com>2015-09-21 11:56:22 -0700
committerJay Freeman (saurik) <saurik@saurik.com>2015-09-21 11:56:22 -0700
commitfac3d3e373c2dcbe20a73aea30d056b033f961bf (patch)
treefccb389a4e324d4b96887114b698f4c89c8a219f
parentb9652d6e8e113addbf4275ba9db0635bb23e05f0 (diff)
downloadldid-fac3d3e373c2dcbe20a73aea30d056b033f961bf.tar.gz
ldid-fac3d3e373c2dcbe20a73aea30d056b033f961bf.tar.zst
ldid-fac3d3e373c2dcbe20a73aea30d056b033f961bf.zip
Correct incompatible flag checks (support for -s).
-rw-r--r--ldid.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/ldid.cpp b/ldid.cpp
index ecca2f4..a6b86d2 100644
--- a/ldid.cpp
+++ b/ldid.cpp
@@ -884,6 +884,10 @@ class Map {
clear();
}
+ bool empty() const {
+ return data_ == NULL;
+ }
+
void open(const char *path, int oflag, int pflag, int mflag) {
clear();
@@ -1462,7 +1466,12 @@ int main(int argc, char *argv[]) {
if (argv[argi][0] != '-')
files.push_back(argv[argi]);
else switch (argv[argi][1]) {
- case 'r': flag_r = true; break;
+ case 'r':
+ _assert(!flag_s);
+ _assert(!flag_S);
+ flag_r = true;
+ break;
+
case 'e': flag_e = true; break;
case 'D': flag_D = true; break;
@@ -1470,6 +1479,7 @@ int main(int argc, char *argv[]) {
case 'a': flag_a = true; break;
case 'A':
+ _assert(!flag_A);
flag_A = true;
if (argv[argi][2] != '\0') {
const char *cpu = argv[argi] + 2;
@@ -1484,11 +1494,13 @@ int main(int argc, char *argv[]) {
break;
case 's':
+ _assert(!flag_r);
_assert(!flag_S);
flag_s = true;
break;
case 'S':
+ _assert(!flag_r);
_assert(!flag_s);
flag_S = true;
if (argv[argi][2] != '\0') {
@@ -1521,7 +1533,8 @@ int main(int argc, char *argv[]) {
break;
}
- _assert(!flag_S || !flag_r);
+ _assert(flag_S || key.empty());
+ _assert(flag_S || flag_I == NULL);
if (files.empty()) usage: {
exit(0);