From ae76545a0094114ef29dba52df97e69ab28b3dbc Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Sun, 3 Mar 2013 09:50:44 +0100 Subject: Abstract mmap() into a compat API The Win32 for mmap() is very different from Unix, so abstract this into our own p11_mmap_xxx() functions. --- common/tests/frob-cert.c | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) (limited to 'common/tests') diff --git a/common/tests/frob-cert.c b/common/tests/frob-cert.c index f8ad392..71018bd 100644 --- a/common/tests/frob-cert.c +++ b/common/tests/frob-cert.c @@ -37,7 +37,6 @@ #include -#include #include #include @@ -86,12 +85,12 @@ main (int argc, char message[ASN1_MAX_ERROR_DESCRIPTION_SIZE] = { 0, }; node_asn *definitions = NULL; node_asn *cert = NULL; - unsigned char *data; - struct stat sb; + p11_mmap *map; + void *data; + size_t size; int start, end; ssize_t len; int ret; - int fd; if (argc != 4) { fprintf (stderr, "usage: frob-cert struct field filename\n"); @@ -107,38 +106,26 @@ main (int argc, ret = asn1_create_element (definitions, argv[1], &cert); err_if_fail (ret, "Certificate"); - fd = open (argv[3], O_RDONLY); - if (fd == -1) { + map = p11_mmap_open (argv[3], &data, &size); + if (map == NULL) { fprintf (stderr, "couldn't open file: %s\n", argv[3]); return 1; } - if (fstat (fd, &sb) < 0) { - fprintf (stderr, "couldn't stat file: %s\n", argv[3]); - return 1; - } - - data = mmap (NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0); - if (data == NULL) { - fprintf (stderr, "couldn't map file: %s\n", argv[3]); - return 1; - } - - ret = asn1_der_decoding (&cert, data, sb.st_size, message); + ret = asn1_der_decoding (&cert, data, size, message); err_if_fail (ret, message); - ret = asn1_der_decoding_startEnd (cert, data, sb.st_size, argv[2], &start, &end); + ret = asn1_der_decoding_startEnd (cert, data, size, argv[2], &start, &end); err_if_fail (ret, "asn1_der_decoding_startEnd"); - len = tlv_length (data + start, sb.st_size - start); + len = tlv_length ((unsigned char *)data + start, size - start); assert (len >= 0); - fprintf (stderr, "%lu %d %d %ld\n", sb.st_size, start, end, len); - fwrite (data + start, 1, len, stdout); + fprintf (stderr, "%lu %d %d %ld\n", (unsigned long)size, start, end, (long)len); + fwrite ((unsigned char *)data + start, 1, len, stdout); fflush (stdout); - munmap (data, sb.st_size); - close (fd); + p11_mmap_close (map); asn1_delete_structure (&cert); asn1_delete_structure (&definitions); -- cgit v1.1