[thin_rmap] region parsing
This commit is contained in:
parent
5498e0bc46
commit
25a090279f
@ -24,3 +24,7 @@ When(/^I run thin_check with (.*?)$/) do |opts|
|
|||||||
run_simple("thin_check #{opts} #{dev_file}", false)
|
run_simple("thin_check #{opts} #{dev_file}", false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
When(/^I run thin_rmap with (.*?)$/) do |opts|
|
||||||
|
run_simple("thin_rmap #{opts} #{dev_file}", false)
|
||||||
|
end
|
||||||
|
|
||||||
|
@ -47,3 +47,63 @@ Feature: thin_rmap
|
|||||||
Scenario: Unrecognised option should cause failure
|
Scenario: Unrecognised option should cause failure
|
||||||
When I run `thin_rmap --unleash-the-hedeghogs`
|
When I run `thin_rmap --unleash-the-hedeghogs`
|
||||||
Then it should fail
|
Then it should fail
|
||||||
|
|
||||||
|
Scenario: Valid region format should pass
|
||||||
|
Given valid metadata
|
||||||
|
When I run thin_rmap with --region 23..7890
|
||||||
|
Then it should pass
|
||||||
|
|
||||||
|
Scenario: Invalid region format should fail (comma instean of dots)
|
||||||
|
Given valid metadata
|
||||||
|
When I run thin_rmap with --region 23,7890
|
||||||
|
Then it should fail
|
||||||
|
|
||||||
|
Scenario: Invalid region format should fail (second number a word)
|
||||||
|
Given valid metadata
|
||||||
|
When I run thin_rmap with --region 23..six
|
||||||
|
Then it should fail
|
||||||
|
|
||||||
|
Scenario: Invalid region format should fail (first number a word)
|
||||||
|
Given valid metadata
|
||||||
|
When I run thin_rmap with --region four..7890
|
||||||
|
Then it should fail
|
||||||
|
|
||||||
|
Scenario: Invalid region format should fail (end is lower than begin)
|
||||||
|
Given valid metadata
|
||||||
|
When I run thin_rmap with --region 89..88
|
||||||
|
Then it should fail
|
||||||
|
|
||||||
|
Scenario: Invalid region format should fail (end is equal to begin)
|
||||||
|
Given valid metadata
|
||||||
|
When I run thin_rmap with --region 89..89
|
||||||
|
Then it should fail
|
||||||
|
|
||||||
|
Scenario: Invalid region format should fail (no begin)
|
||||||
|
Given valid metadata
|
||||||
|
When I run thin_rmap with --region ..89
|
||||||
|
Then it should fail
|
||||||
|
|
||||||
|
Scenario: Invalid region format should fail (no end)
|
||||||
|
Given valid metadata
|
||||||
|
When I run thin_rmap with --region 89..
|
||||||
|
Then it should fail
|
||||||
|
|
||||||
|
Scenario: Invalid region format should fail (no region at all)
|
||||||
|
Given valid metadata
|
||||||
|
When I run thin_rmap with --region
|
||||||
|
Then it should fail
|
||||||
|
|
||||||
|
Scenario: Invalid region format should fail (three dots)
|
||||||
|
Given valid metadata
|
||||||
|
When I run thin_rmap with --region 89...99
|
||||||
|
Then it should fail
|
||||||
|
|
||||||
|
Scenario: Multiple regions should pass
|
||||||
|
Given valid metadata
|
||||||
|
When I run thin_rmap with --region 1..23 --region 45..78
|
||||||
|
Then it should pass
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
#include <sstream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
@ -19,9 +20,30 @@ namespace {
|
|||||||
|
|
||||||
int rmap(string const &path, vector<region> const ®ions) {
|
int rmap(string const &path, vector<region> const ®ions) {
|
||||||
cerr << "Not implemented" << endl;
|
cerr << "Not implemented" << endl;
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
region parse_region(string const &str) {
|
||||||
|
istringstream in(str);
|
||||||
|
|
||||||
|
char dots[2] = {'\0', '\0'};
|
||||||
|
block_address begin, end;
|
||||||
|
|
||||||
|
in >> begin;
|
||||||
|
in.read(dots, sizeof(dots));
|
||||||
|
if (dots[0] != '.' || dots[1] != '.')
|
||||||
|
throw runtime_error("badly formed region (no dots)");
|
||||||
|
in >> end;
|
||||||
|
|
||||||
|
if (in.fail())
|
||||||
|
throw runtime_error("badly formed region (couldn't parse numbers)");
|
||||||
|
|
||||||
|
if (end <= begin)
|
||||||
|
throw runtime_error("badly formed region (end <= begin)");
|
||||||
|
|
||||||
|
return region(begin, end);
|
||||||
|
};
|
||||||
|
|
||||||
void usage(ostream &out, string const &cmd) {
|
void usage(ostream &out, string const &cmd) {
|
||||||
out << "Usage: " << cmd << " [options] {device|file}" << endl
|
out << "Usage: " << cmd << " [options] {device|file}" << endl
|
||||||
<< "Options:" << endl
|
<< "Options:" << endl
|
||||||
@ -60,6 +82,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
// region
|
// region
|
||||||
|
regions.push_back(parse_region(optarg));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user