- size = lseek(fd, 0L, SEEK_END);
- pos = lseek(fd, 0L, SEEK_SET);
+ tok += 2;
+ if (*tok != EOL)
+ {
+ // Check size parameter (can be omitted)
+ if (*tok++ == ',')
+ {
+ if (*tok != ',')
+ {
+ if (abs_expr(&size) != OK)
+ {
+ close(fd);
+ return ERROR;
+ }
+ }
+ else
+ size = lseek(fd, 0L, SEEK_END);
+ }
+
+ // Check offset parameter (can be omitted)
+ if (*tok != EOL)
+ {
+ if (*tok++ == ',')
+ {
+ if (*tok != EOL)
+ {
+ if (abs_expr(&pos) != OK)
+ {
+ close(fd);
+ return ERROR;
+ }
+ lseek(fd, pos, SEEK_SET);
+ size -= pos;
+ }
+ else
+ {
+ // offset parameter omitted, so it's 0
+ pos = lseek(fd, 0L, SEEK_SET);
+ }
+ }
+ else
+ return(comma_error);
+ }
+ else
+ pos = lseek(fd, 0L, SEEK_SET);
+ }
+ else
+ {
+ //size_pos_fallthrough:
+ size = lseek(fd, 0L, SEEK_END);
+ pos = lseek(fd, 0L, SEEK_SET);
+ }