parent
4bced31393
commit
59a532c6f6
@ -0,0 +1,4 @@ |
||||
#pragma once |
||||
|
||||
int do_get_offset(int argc, char *argv[]); |
||||
int do_get_size(int argc, char *argv[]); |
@ -0,0 +1,103 @@ |
||||
#include <stdio.h> |
||||
#include <stdlib.h> |
||||
#include <string.h> |
||||
#include <time.h> |
||||
|
||||
#include <getopt.h> |
||||
|
||||
#include <image.h> |
||||
#include <info.h> |
||||
#include <macros.h> |
||||
#include <sign.h> |
||||
|
||||
enum { |
||||
OPTION_HELP = 'h', |
||||
OPTION_IMAGE = 'i', |
||||
}; |
||||
|
||||
struct args { |
||||
const char *image; |
||||
}; |
||||
|
||||
static int parse_args(struct args *args, int argc, char *argv[]) |
||||
{ |
||||
struct option options[] = { |
||||
{ "help", no_argument, NULL, OPTION_HELP }, |
||||
{ "image", required_argument, 0, OPTION_IMAGE }, |
||||
{ NULL, 0, 0, 0 }, |
||||
}; |
||||
int ret; |
||||
|
||||
while ((ret = getopt_long(argc, (char * const *)argv, "hi:d:k:", options, |
||||
NULL)) >= 0) { |
||||
switch (ret) { |
||||
case OPTION_HELP: return -1; |
||||
case OPTION_IMAGE: args->image = optarg; break; |
||||
default: break; |
||||
} |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int do_get_offset(int argc, char *argv[]) |
||||
{ |
||||
struct args args; |
||||
struct rots_hdr hdr; |
||||
FILE *fp; |
||||
|
||||
if (parse_args(&args, argc, argv) < 0) { |
||||
fprintf(stderr, "invalid\n"); |
||||
return -1; |
||||
} |
||||
|
||||
if (!(fp = fopen(args.image, "rb"))) { |
||||
fprintf(stderr, "error: file '%s' not found.\n", args.image); |
||||
return -1; |
||||
} |
||||
|
||||
if (rots_read_hdr(fp, &hdr) < 0) { |
||||
fprintf(stderr, "error: file '%s' is not a ROTS-image.\n", args.image); |
||||
goto err_close_fp; |
||||
} |
||||
|
||||
printf("%zu\n", ftell(fp)); |
||||
fclose(fp); |
||||
|
||||
return 0; |
||||
|
||||
err_close_fp: |
||||
fclose(fp); |
||||
return -1; |
||||
} |
||||
|
||||
int do_get_size(int argc, char *argv[]) |
||||
{ |
||||
struct args args; |
||||
struct rots_hdr hdr; |
||||
FILE *fp; |
||||
|
||||
if (parse_args(&args, argc, argv) < 0) { |
||||
fprintf(stderr, "invalid\n"); |
||||
return -1; |
||||
} |
||||
|
||||
if (!(fp = fopen(args.image, "rb"))) { |
||||
fprintf(stderr, "error: file '%s' not found.\n", args.image); |
||||
return -1; |
||||
} |
||||
|
||||
if (rots_read_hdr(fp, &hdr) < 0) { |
||||
fprintf(stderr, "error: file '%s' is not a ROTS-image.\n", args.image); |
||||
goto err_close_fp; |
||||
} |
||||
|
||||
printf("%zu\n", hdr.size); |
||||
fclose(fp); |
||||
|
||||
return 0; |
||||
|
||||
err_close_fp: |
||||
fclose(fp); |
||||
return -1; |
||||
} |
Loading…
Reference in new issue