diff --git a/tests/t-reader.c b/tests/t-reader.c index 53118b5..2b6a40c 100644 --- a/tests/t-reader.c +++ b/tests/t-reader.c @@ -1,207 +1,208 @@ /* t-reader.c - basic tests for the reader object * Copyright (C) 2017 g10 Code GmbH * * This file is part of KSBA. * * KSBA is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * KSBA is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include "../src/ksba.h" #include "t-common.h" void test_fd(const char* path) { int fd = open (path, O_RDONLY); gpg_error_t err = 0; ksba_reader_t reader; ksba_cert_t cert; if (fd < 0) { perror ("open() failed"); exit (1); } if ((err = ksba_reader_new (&reader))) { fprintf (stderr, "ksba_reader_new() failed: %s\n", gpg_strerror (err)); exit (1); } if ((err = ksba_reader_set_fd (reader, fd))) { fprintf (stderr, "ksba_reader_set_fd() failed: %s\n", gpg_strerror (err)); exit (1); } if ((err = ksba_cert_new (&cert))) { fprintf (stderr, "ksba_cert_new() failed: %s\n", gpg_strerror (err)); exit (1); } if ((err = ksba_cert_read_der (cert, reader))) { fprintf(stderr, "ksba_cert_read_der() failed: %s\n", gpg_strerror (err)); exit (1); } ksba_cert_release (cert); ksba_reader_release (reader); close (fd); } void test_file(const char* path) { FILE* fp = fopen (path, "r"); gpg_error_t err = 0; ksba_reader_t reader; ksba_cert_t cert; if (!fp) { perror ("fopen() failed"); exit (1); } if ((err = ksba_reader_new (&reader))) { fprintf (stderr, "ksba_reader_new() failed: %s\n", gpg_strerror (err)); exit (1); } if ((err = ksba_reader_set_file (reader, fp))) { fprintf (stderr, "ksba_reader_set_fd() failed: %s\n", gpg_strerror (err)); exit (1); } if ((err = ksba_cert_new (&cert))) { fprintf (stderr, "ksba_cert_new() failed: %s\n", gpg_strerror (err)); exit (1); } if ((err = ksba_cert_read_der (cert, reader))) { fprintf(stderr, "ksba_cert_read_der() failed: %s\n", gpg_strerror (err)); exit (1); } ksba_cert_release (cert); ksba_reader_release (reader); fclose (fp); } void test_mem(const char* path) { int fd = open (path, O_RDONLY); gpg_error_t err = 0; ksba_reader_t reader; ksba_cert_t cert; char *mem = NULL; ssize_t ret = 0; size_t p = 0; struct stat st; if (fd < 0) { perror ("fopen() failed"); exit (1); } if (fstat (fd, &st)) { fprintf (stderr, "fstat() failed: %s\n", gpg_strerror (err)); exit (1); } mem = xmalloc(st.st_size); while (p < st.st_size && (ret = read(fd, mem + p, st.st_size - p))) { if (ret < 0) { fprintf (stderr, "read() failed: %s\n", gpg_strerror (err)); exit (1); } p += ret; } if ((err = ksba_reader_new (&reader))) { exit (1); } if ((err = ksba_reader_set_mem (reader, mem, st.st_size))) { fprintf (stderr, "ksba_reader_set_mem() failed: %s\n", gpg_strerror (err)); exit (1); } if ((err = ksba_cert_new (&cert))) { fprintf (stderr, "ksba_cert_new() failed: %s\n", gpg_strerror (err)); exit (1); } if ((err = ksba_cert_read_der (cert, reader))) { fprintf(stderr, "ksba_cert_read_der() failed: %s\n", gpg_strerror (err)); exit (1); } ksba_cert_release (cert); ksba_reader_release (reader); xfree (mem); close (fd); } int main (int argc, char **argv) { if (argc == 1) { test_fd (prepend_srcdir ("cert_g10code_test1.der")); test_file (prepend_srcdir ("cert_g10code_test1.der")); test_mem (prepend_srcdir ("cert_g10code_test1.der")); } else { - for (int i = 1; i < argc; ++i) + int i; + for (i = 1; i < argc; ++i) { test_fd (argv[i]); test_file (argv[i]); test_mem (argv[i]); } } return 0; }