- length = strtoul(args[2], &cp, 0);
- if (*cp || length == ULONG_MAX || length % p->erase_size)
- {
- return ERROR_INVALID_ARGUMENTS;
+ COMMAND_PARSE_NUMBER(ulong, args[1], offset);
+ if ((offset % p->erase_size) != 0 || offset >= size)
+ return ERROR_INVALID_ARGUMENTS;
+
+ COMMAND_PARSE_NUMBER(ulong, args[2], length);
+ if ((length == 0) || (length % p->erase_size) != 0
+ || (length + offset) > size)
+ return ERROR_INVALID_ARGUMENTS;
+
+ offset /= p->erase_size;
+ length /= p->erase_size;
+ } else {
+ offset = 0;
+ length = p->num_blocks;