Blame test/testiso9660.c

Packit dd8086
/*
Packit dd8086
  Copyright (C) 2003, 2006-2009, 2011, 2017
Packit dd8086
   Rocky Bernstein <rocky@gnu.org>
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
/* Tests ISO9660 library routines. */
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
#include <ctype.h>
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_STDIO_H
Packit dd8086
#include <stdio.h>
Packit dd8086
#endif
Packit dd8086
Packit dd8086
#include <cdio/iso9660.h>
Packit dd8086
Packit dd8086
static bool
Packit dd8086
time_compare(struct tm *p_tm1, struct tm *p_tm2)
Packit dd8086
{
Packit dd8086
  bool okay = true;
Packit dd8086
  if (!p_tm1) {
Packit dd8086
    printf("get time is NULL\n");
Packit dd8086
    return false;
Packit dd8086
  }
Packit dd8086
  if (!p_tm2) {
Packit dd8086
    printf("set time is NULL\n");
Packit dd8086
    return false;
Packit dd8086
  }
Packit dd8086
  if (p_tm1->tm_year != p_tm2->tm_year) {
Packit dd8086
    printf("Years aren't equal. get: %d, set %d\n",
Packit dd8086
	   p_tm1->tm_year, p_tm2->tm_year);
Packit dd8086
    okay=false;
Packit dd8086
  }
Packit dd8086
  if (p_tm1->tm_mon != p_tm2->tm_mon) {
Packit dd8086
    printf("Months aren't equal. get: %d, set %d\n",
Packit dd8086
	   p_tm1->tm_mon, p_tm2->tm_mon);
Packit dd8086
    okay=false;
Packit dd8086
  }
Packit dd8086
  if (p_tm1->tm_mday != p_tm2->tm_mday) {
Packit dd8086
    printf("Month days aren't equal. get: %d, set %d\n",
Packit dd8086
	   p_tm1->tm_mday, p_tm2->tm_mday);
Packit dd8086
    okay=false;
Packit dd8086
  }
Packit dd8086
  if (p_tm1->tm_min != p_tm2->tm_min) {
Packit dd8086
    printf("minutes aren't equal. get: %d, set %d\n",
Packit dd8086
	   p_tm1->tm_min, p_tm2->tm_min);
Packit dd8086
    okay=false;
Packit dd8086
  }
Packit dd8086
  if (p_tm1->tm_hour != p_tm2->tm_hour) {
Packit dd8086
    printf("hours aren't equal. get: %d, set %d\n",
Packit dd8086
	   p_tm1->tm_hour, p_tm2->tm_hour);
Packit dd8086
    okay=false;
Packit dd8086
  }
Packit dd8086
  if (p_tm1->tm_sec != p_tm2->tm_sec) {
Packit dd8086
    printf("seconds aren't equal. get: %d, set %d\n",
Packit dd8086
	   p_tm1->tm_sec, p_tm2->tm_sec);
Packit dd8086
    okay=false;
Packit dd8086
  }
Packit dd8086
  if (p_tm1->tm_wday != p_tm2->tm_wday) {
Packit dd8086
    printf("Week days aren't equal. get: %d, set %d\n",
Packit dd8086
	   p_tm1->tm_wday, p_tm2->tm_wday);
Packit dd8086
    okay=false;
Packit dd8086
  }
Packit dd8086
  if (p_tm1->tm_yday != p_tm2->tm_yday) {
Packit dd8086
    printf("Year days aren't equal. get: %d, set %d\n",
Packit dd8086
	   p_tm1->tm_yday, p_tm2->tm_yday);
Packit dd8086
    okay=false;
Packit dd8086
  }
Packit dd8086
#ifdef FIXED
Packit dd8086
  if (p_tm1->tm_isdst != p_tm2->tm_isdst) {
Packit dd8086
    printf("Is daylight savings times aren't equal. get: %d, set %d\n",
Packit dd8086
	   p_tm1->tm_isdst, p_tm2->tm_isdst);
Packit dd8086
    okay=false;
Packit dd8086
  }
Packit dd8086
#endif
Packit dd8086
#ifdef HAVE_TM_GMTOFF
Packit dd8086
  if (p_tm1->tm_gmtoff != p_tm2->tm_gmtoff) {
Packit dd8086
    printf("GMT offsets aren't equal. get: %ld, set %ld\n",
Packit dd8086
	   p_tm1->tm_gmtoff, p_tm2->tm_gmtoff);
Packit dd8086
    okay=false;
Packit dd8086
  }
Packit dd8086
  if (p_tm1 != p_tm2 && p_tm1 && p_tm2) {
Packit dd8086
#ifdef FIXED
Packit dd8086
    if (strcmp(p_tm1->tm_zone, p_tm2->tm_zone) != 0) {
Packit dd8086
      printf("Time Zone values. get: %s, set %s\n",
Packit dd8086
	     p_tm1->tm_zone, p_tm2->tm_zone);
Packit dd8086
      /* Argh... sometimes GMT is converted to UTC. So
Packit dd8086
	 Let's not call this a failure if everything else was okay.
Packit dd8086
       */
Packit dd8086
    }
Packit dd8086
#endif
Packit dd8086
  }
Packit dd8086
#endif
Packit dd8086
  return okay;
Packit dd8086
}
Packit dd8086
Packit dd8086
int
Packit dd8086
main (int argc, const char *argv[])
Packit dd8086
{
Packit dd8086
  int c;
Packit dd8086
  int i;
Packit dd8086
  int i_bad = 0;
Packit dd8086
  char dst[100];
Packit dd8086
  char *dst_p;
Packit dd8086
  int achars[] = {'!', '"', '%', '&', '(', ')', '*', '+', ',', '-', '.',
Packit dd8086
                  '/', '?', '<', '=', '>'};
Packit dd8086
Packit dd8086
  /*********************************************
Packit dd8086
   * Test ACHAR and DCHAR
Packit dd8086
   *********************************************/
Packit dd8086
Packit dd8086
  for (c='A'; c<='Z'; c++ ) {
Packit dd8086
    if (!iso9660_is_dchar(c)) {
Packit dd8086
      printf("Failed iso9660_is_dchar test on %c\n", c);
Packit dd8086
      i_bad++;
Packit dd8086
    }
Packit dd8086
    if (!iso9660_is_achar(c)) {
Packit dd8086
      printf("Failed iso9660_is_achar test on %c\n", c);
Packit dd8086
      i_bad++;
Packit dd8086
    }
Packit dd8086
  }
Packit dd8086
Packit dd8086
  if (i_bad) return i_bad;
Packit dd8086
Packit dd8086
  for (c='0'; c<='9'; c++ ) {
Packit dd8086
    if (!iso9660_is_dchar(c)) {
Packit dd8086
      printf("Failed iso9660_is_dchar test on %c\n", c);
Packit dd8086
      i_bad++;
Packit dd8086
    }
Packit dd8086
    if (!iso9660_is_achar(c)) {
Packit dd8086
      printf("Failed iso9660_is_achar test on %c\n", c);
Packit dd8086
      i_bad++;
Packit dd8086
    }
Packit dd8086
  }
Packit dd8086
Packit dd8086
  if (i_bad) return i_bad;
Packit dd8086
Packit dd8086
  for (i=0; i<=13; i++ ) {
Packit dd8086
    c=achars[i];
Packit dd8086
    if (iso9660_is_dchar(c)) {
Packit dd8086
      printf("Should not pass iso9660_is_dchar test on %c\n", c);
Packit dd8086
      i_bad++;
Packit dd8086
    }
Packit dd8086
    if (!iso9660_is_achar(c)) {
Packit dd8086
      printf("Failed iso9660_is_achar test on symbol %c\n", c);
Packit dd8086
      i_bad++;
Packit dd8086
    }
Packit dd8086
  }
Packit dd8086
Packit dd8086
  if (i_bad) return i_bad;
Packit dd8086
Packit dd8086
  /*********************************************
Packit dd8086
   * Test iso9660_strncpy_pad
Packit dd8086
   *********************************************/
Packit dd8086
Packit dd8086
  iso9660_strncpy_pad(dst, "1_3", 5, ISO9660_DCHARS);
Packit dd8086
  if ( 0 != strncmp(dst, "1_3  ", 5) ) {
Packit dd8086
    printf("Failed iso9660_strncpy_pad DCHARS\n");
Packit dd8086
    return 31;
Packit dd8086
  }
Packit dd8086
  iso9660_strncpy_pad(dst, "ABC!123", 2, ISO9660_ACHARS);
Packit dd8086
  if ( 0 != strncmp(dst, "AB", 2) ) {
Packit dd8086
    printf("Failed iso9660_strncpy_pad ACHARS truncation\n");
Packit dd8086
    return 32;
Packit dd8086
  }
Packit dd8086
Packit dd8086
  /*********************************************
Packit dd8086
   * Test iso9660_dirname_valid_p
Packit dd8086
   *********************************************/
Packit dd8086
Packit dd8086
  if ( iso9660_dirname_valid_p("/NOGOOD") ) {
Packit dd8086
    printf("/NOGOOD should fail iso9660_dirname_valid_p\n");
Packit dd8086
    return 33;
Packit dd8086
  }
Packit dd8086
  if ( iso9660_dirname_valid_p("LONGDIRECTORY/NOGOOD") ) {
Packit dd8086
    printf("LONGDIRECTORY/NOGOOD should fail iso9660_dirname_valid_p\n");
Packit dd8086
    return 34;
Packit dd8086
  }
Packit dd8086
  if ( !iso9660_dirname_valid_p("OKAY/DIR") ) {
Packit dd8086
    printf("OKAY/DIR should pass iso9660_dirname_valid_p\n");
Packit dd8086
    return 35;
Packit dd8086
  }
Packit dd8086
  if ( iso9660_dirname_valid_p("OKAY/FILE.EXT") ) {
Packit dd8086
    printf("OKAY/FILENAME.EXT should fail iso9660_dirname_valid_p\n");
Packit dd8086
    return 36;
Packit dd8086
  }
Packit dd8086
Packit dd8086
  /*********************************************
Packit dd8086
   * Test iso9660_pathname_valid_p
Packit dd8086
   *********************************************/
Packit dd8086
Packit dd8086
  if ( !iso9660_pathname_valid_p("OKAY/FILE.EXT") ) {
Packit dd8086
    printf("OKAY/FILE.EXT should pass iso9660_dirname_valid_p\n");
Packit dd8086
    return 37;
Packit dd8086
  }
Packit dd8086
  if ( iso9660_pathname_valid_p("OKAY/FILENAMETOOLONG.EXT") ) {
Packit dd8086
    printf("OKAY/FILENAMETOOLONG.EXT should fail iso9660_dirname_valid_p\n");
Packit dd8086
    return 38;
Packit dd8086
  }
Packit dd8086
  if ( iso9660_pathname_valid_p("OKAY/FILE.LONGEXT") ) {
Packit dd8086
    printf("OKAY/FILE.LONGEXT should fail iso9660_dirname_valid_p\n");
Packit dd8086
    return 39;
Packit dd8086
  }
Packit dd8086
Packit dd8086
  dst_p = iso9660_pathname_isofy ("this/file.ext", 1);
Packit dd8086
  if ( 0 != strncmp(dst_p, "this/file.ext;1", 16) ) {
Packit dd8086
    printf("Failed iso9660_pathname_isofy\n");
Packit dd8086
    free(dst_p);
Packit dd8086
    return 40;
Packit dd8086
  }
Packit dd8086
  free(dst_p);
Packit dd8086
Packit dd8086
  /*********************************************
Packit dd8086
   * Test get/set date
Packit dd8086
   *********************************************/
Packit dd8086
Packit dd8086
  {
Packit dd8086
    struct tm *p_tm, tm;
Packit dd8086
    iso9660_dtime_t dtime;
Packit dd8086
    time_t now = time(NULL);
Packit dd8086
Packit dd8086
    memset(&dtime, 0, sizeof(dtime));
Packit dd8086
    p_tm = localtime(&now;;
Packit dd8086
    iso9660_set_dtime(p_tm, &dtime);
Packit dd8086
    iso9660_get_dtime(&dtime, true, &tm;;
Packit dd8086
Packit dd8086
    p_tm = gmtime(&now;;
Packit dd8086
    iso9660_set_dtime_with_timezone(p_tm, 0, &dtime);
Packit dd8086
    if (!iso9660_get_dtime(&dtime, false, &tm)) {
Packit dd8086
      printf("Error returned by iso9660_get_dtime_with_timezone\n");
Packit dd8086
      return 41;
Packit dd8086
    }
Packit dd8086
Packit dd8086
    if ( !time_compare(p_tm, &tm) ) {
Packit dd8086
      printf("GMT time retrieved with iso9660_get_dtime_with_timezone() not same as that\n");
Packit dd8086
      printf("set with iso9660_set_dtime().\n");
Packit dd8086
      return 42;
Packit dd8086
    }
Packit dd8086
Packit dd8086
#ifdef HAVE_TM_GMTOFF
Packit dd8086
    if ( !time_compare(p_tm, &tm) ) {
Packit dd8086
      return 43;
Packit dd8086
    }
Packit dd8086
    p_tm = gmtime(&now;;
Packit dd8086
    iso9660_set_dtime(p_tm, &dtime);
Packit dd8086
    if (!iso9660_get_dtime(&dtime, false, &tm)) {
Packit dd8086
      printf("Error returned by iso9660_get_dtime\n");
Packit dd8086
      return 44;
Packit dd8086
    }
Packit dd8086
Packit dd8086
    if ( !time_compare(p_tm, &tm) ) {
Packit dd8086
      printf("GMT time retrieved with iso9660_get_dtime() not same as that\n");
Packit dd8086
      printf("set with iso9660_set_dtime().\n");
Packit dd8086
      return 45;
Packit dd8086
    }
Packit dd8086
Packit dd8086
    {
Packit dd8086
      iso9660_ltime_t ltime;
Packit dd8086
      p_tm = localtime(&now;;
Packit dd8086
      iso9660_set_ltime(p_tm, <ime);
Packit dd8086
Packit dd8086
      if (!iso9660_get_ltime(&ltime, &tm)) {
Packit dd8086
	printf("Problem running iso9660_get_ltime\n");
Packit dd8086
	return 46;
Packit dd8086
      }
Packit dd8086
Packit dd8086
      if ( ! time_compare(p_tm, &tm) ) {
Packit dd8086
	printf("local time retrieved with iso9660_get_ltime() not\n");
Packit dd8086
	printf("same as that set with iso9660_set_ltime().\n");
Packit dd8086
	return 47;
Packit dd8086
      }
Packit dd8086
Packit dd8086
      p_tm = gmtime(&now;;
Packit dd8086
      iso9660_set_ltime(p_tm, <ime);
Packit dd8086
      iso9660_get_ltime(&ltime, &tm;;
Packit dd8086
      if ( ! time_compare(p_tm, &tm) ) {
Packit dd8086
	printf("GMT time retrieved with iso9660_get_ltime() not\n");
Packit dd8086
	printf("same as that set with iso9660_set_ltime().\n");
Packit dd8086
	return 48;
Packit dd8086
      }
Packit dd8086
    }
Packit dd8086
#endif
Packit dd8086
  }
Packit dd8086
Packit dd8086
  return 0;
Packit dd8086
}