- if (count_strings (lines) < (size_t) 1+partnum) {
- reply_with_error ("partition number out of range: %d", partnum);
+ if (lines[0] == NULL || STRNEQ (lines[0], "BYT;")) {
+ reply_with_error ("unknown signature, expected \"BYT;\" as first line of the output: %s",
+ lines[0] ? lines[0] : "(signature was null)");
+ free_strings (lines);
+ return -1;
+ }
+
+ if (lines[1] == NULL) {
+ reply_with_error ("parted didn't return a line describing the device");
+ free_strings (lines);
+ return -1;
+ }
+
+ size_t row;
+ int pnum;
+ for (row = 2; lines[row] != NULL; ++row) {
+ if (sscanf (lines[row], "%d:", &pnum) != 1) {
+ reply_with_error ("could not parse row from output of parted print command: %s", lines[row]);
+ free_strings (lines);
+ return -1;
+ }
+ if (pnum == partnum)
+ break;
+ }
+
+ if (lines[row] == NULL) {
+ reply_with_error ("partition number %d not found", partnum);