Blame test/testudf.c

Packit dd8086
/*
Packit dd8086
  Copyright (C) 2013 Rocky Bernstein <rocky@gnu.org>
Packit dd8086
  Copyright (C) 2013-2014 Pete Batard <pete@akeo.ie>
Packit dd8086
Packit dd8086
  This program is free software: you can redistribute it and/or modify
Packit dd8086
  it under the terms of the GNU General Public License as published by
Packit dd8086
  the Free Software Foundation, either version 3 of the License, or
Packit dd8086
  (at your option) any later version.
Packit dd8086
Packit dd8086
  This program is distributed in the hope that it will be useful,
Packit dd8086
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd8086
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd8086
  GNU General Public License for more details.
Packit dd8086
Packit dd8086
  You should have received a copy of the GNU General Public License
Packit dd8086
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit dd8086
*/
Packit dd8086
Packit dd8086
/* Tests reading UDF info from an UDF image.  */
Packit dd8086
Packit dd8086
#ifndef DATA_DIR
Packit dd8086
#define DATA_DIR "./data"
Packit dd8086
#endif
Packit dd8086
#define UDF_IMAGE DATA_DIR "/udf102.iso"
Packit dd8086
Packit dd8086
#ifdef HAVE_CONFIG_H
Packit dd8086
#include "config.h"
Packit dd8086
#define __CDIO_CONFIG_H__ 1
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#ifdef HAVE_STDIO_H
Packit dd8086
#include <stdio.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_STDLIB_H
Packit dd8086
#include <stdlib.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_STRING_H
Packit dd8086
#include <string.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_UNISTD_H
Packit dd8086
#include <unistd.h>
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_SYS_TYPES_H
Packit dd8086
#include <sys/types.h>
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#include <cdio/cdio.h>
Packit dd8086
#include <cdio/udf.h>
Packit dd8086
Packit dd8086
#define EXPECTED_NAME    "FéжΘvrier"
Packit dd8086
#define EXPECTED_LENGTH  10
Packit dd8086
Packit dd8086
int
Packit dd8086
main(int argc, const char *argv[])
Packit dd8086
{
Packit dd8086
  char const *psz_fname = UDF_IMAGE;
Packit dd8086
  char volume_id[192];         /* 3*64 to account for UTF-8 */
Packit dd8086
  udf_t* p_udf = NULL;
Packit dd8086
  udf_dirent_t *p_udf_root = NULL, *p_udf_file = NULL;
Packit dd8086
  int64_t file_length;
Packit dd8086
  int rc=0;
Packit dd8086
Packit dd8086
  p_udf = udf_open(psz_fname);
Packit dd8086
Packit dd8086
  if (NULL == p_udf) {
Packit dd8086
    fprintf(stderr, "Couldn't open %s as an UDF image\n",
Packit dd8086
      psz_fname);
Packit dd8086
    return 1;
Packit dd8086
  }
Packit dd8086
Packit dd8086
  p_udf_root = udf_get_root(p_udf, true, 0);
Packit dd8086
  if (NULL == p_udf_root) {
Packit dd8086
    fprintf(stderr, "Could not locate UDF root directory\n");
Packit dd8086
    rc=2;
Packit dd8086
    goto exit;
Packit dd8086
  }
Packit dd8086
Packit dd8086
  if ( (udf_get_logical_volume_id(p_udf, volume_id, sizeof(volume_id)) <= 0)
Packit dd8086
    || (strcmp(EXPECTED_NAME, volume_id) != 0) ) {
Packit dd8086
    fprintf(stderr, "Unexpected UDF logical volume ID\n");
Packit dd8086
    rc=3;
Packit dd8086
    goto exit;
Packit dd8086
  }
Packit dd8086
  printf("-- Good! Volume id matches expected UTF-8 data\n");
Packit dd8086
Packit dd8086
  p_udf_file = udf_fopen(p_udf_root, EXPECTED_NAME);
Packit dd8086
  if (!p_udf_file) {
Packit dd8086
    fprintf(stderr, "Could not locate expected file in UDF image\n");
Packit dd8086
    rc=4;
Packit dd8086
    goto exit;
Packit dd8086
  }
Packit dd8086
  printf("-- Good! File name matches expected UTF-8 data\n");
Packit dd8086
Packit dd8086
  file_length = udf_get_file_length(p_udf_file);
Packit dd8086
  if (file_length != EXPECTED_LENGTH) {
Packit dd8086
    fprintf(stderr, "Unexpected UDF file length\n");
Packit dd8086
    rc=5;
Packit dd8086
    goto exit;
Packit dd8086
  }
Packit dd8086
  printf("-- Good! File length matches expected length\n");
Packit dd8086
Packit dd8086
 exit:
Packit dd8086
  if (p_udf_root != NULL)
Packit dd8086
    udf_dirent_free(p_udf_root);
Packit dd8086
  if (p_udf_file != NULL)
Packit dd8086
    udf_dirent_free(p_udf_file);
Packit dd8086
  udf_close(p_udf);
Packit dd8086
  return rc;
Packit dd8086
}