Added code to validate arg for the set command
This commit is contained in:
parent
8a651b063f
commit
3c6ed2cb47
42
wrapper.cpp
42
wrapper.cpp
|
@ -122,12 +122,39 @@ bool print_status(XKeyboard& xkb, string format) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool set_group(XKeyboard& xkb, string group) {
|
bool set_group(XKeyboard& xkb, string group) {
|
||||||
bool relative = (group[0] == '+' || group[0] == '-');
|
bool relative = false;
|
||||||
|
|
||||||
|
// Check that 'group' is a valid integer (and whether it's relative or not)
|
||||||
|
size_t i = 0;
|
||||||
|
if (group[0] == '+' || group[0] == '-') {
|
||||||
|
relative = true;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
for (; i < group.length(); ++i) {
|
||||||
|
if (!isdigit(group[i])) {
|
||||||
|
cerr << group << " is not an integer" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int group_int = atoi(group.c_str());
|
int group_int = atoi(group.c_str());
|
||||||
if (relative)
|
if (relative) {
|
||||||
return xkb.changeGroup(group_int);
|
if (!xkb.changeGroup(group_int)) {
|
||||||
else
|
cerr << "Failed to change group" << endl;
|
||||||
return xkb.setGroupByNum(group_int);
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (group_int >= xkb.groupCount()) {
|
||||||
|
cerr << "layout_number must be between 0 and " << xkb.groupCount()-1 << endl;
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
if (!xkb.setGroupByNum(group_int)) {
|
||||||
|
cerr << "Failed to change group" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -145,10 +172,8 @@ int main(int argc, char* argv[])
|
||||||
if (!print_status(xkb, string(argv[2])))
|
if (!print_status(xkb, string(argv[2])))
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
} else if (command == "set") {
|
} else if (command == "set") {
|
||||||
if (!set_group(xkb, string(argv[2]))) {
|
if (!set_group(xkb, string(argv[2])))
|
||||||
cerr << "Failed to set layout" << endl;
|
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
print_usage(string(argv[0]));
|
print_usage(string(argv[0]));
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
@ -161,3 +186,4 @@ int main(int argc, char* argv[])
|
||||||
}
|
}
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue