+ case 'R':
+ if ((fd = open(optarg, O_RDONLY)) == -1) {
+ fprintf(stderr, "Error opening %s\n", optarg);
+ return 3;
+ }
+ if (fstat(fd, &sb) == -1) {
+ fprintf(stderr, "Error getting size of %s\n", optarg);
+ close(fd);
+ return 3;
+ }
+ if (!(fbuf = malloc(sb.st_size))) {
+ fprintf(stderr, "Error allocating memory for %s\n", optarg);
+ close(fd);
+ return 3;
+ }
+ if (read(fd, fbuf, sb.st_size) != sb.st_size) {
+ fprintf(stderr, "Error reading %s\n", optarg);
+ free(fbuf);
+ close(fd);
+ return 3;
+ }
+ ret = jshn_parse(fbuf);
+ free(fbuf);
+ close(fd);
+ return ret;