diff --git a/include/cdio/iso9660.h b/include/cdio/iso9660.h index 3f62854d..e93bc188 100644 --- a/include/cdio/iso9660.h +++ b/include/cdio/iso9660.h @@ -1,5 +1,5 @@ /* - $Id: iso9660.h,v 1.65 2005/02/13 22:03:00 rocky Exp $ + $Id: iso9660.h,v 1.66 2005/02/14 02:18:58 rocky Exp $ Copyright (C) 2000 Herbert Valerio Riedel Copyright (C) 2003, 2004, 2005 Rocky Bernstein @@ -511,6 +511,11 @@ typedef struct iso9660_svd_s iso9660_svd_t; PRAGMA_END_PACKED +typedef uint32_t posix_mode_t; +typedef uint32_t posix_nlink_t; +typedef uint32_t posix_uid_t; +typedef uint32_t posix_gid_t; + /*! \brief Unix stat-like version of iso9660_dir The iso9660_stat structure is not part of the ISO-9660 @@ -521,24 +526,24 @@ PRAGMA_END_PACKED @see iso9660_dir */ struct iso9660_stat_s { /* big endian!! */ - bool b_rock; /**< has Rock Ridge extension. - If not true then the next 7 feilds - aren't used. - */ - mode_t st_mode; /**< protection */ - nlink_t st_nlinks; /**< number of hard links */ - uid_t st_uid; /**< user ID of owner */ - gid_t st_gid; /**< group ID of owner */ - uint8_t s_rock_offset; - int i_size; -#if 0 - time_t st_atime; /**< time of last access */ - time_t st_mtime; /**< time of last modification */ - time_t st_ctime; /**< time of last change */ -#endif + bool b_rock; /**< has Rock Ridge extension. + If not true then the next 9 fields + aren't used. + */ + posix_mode_t st_mode; /**< protection */ + posix_nlink_t st_nlinks; /**< number of hard links */ + posix_uid_t st_uid; /**< user ID of owner */ + posix_gid_t st_gid; /**< group ID of owner */ + uint8_t s_rock_offset; + int i_size; /**< FIXME: Is this one of the + size fields below? */ + struct tm atime; /**< time of last access */ + struct tm mtime; /**< time of last modification */ + struct tm ctime; /**< create time */ /* Non Ridge-specific fields */ - struct tm tm; /**< time on entry */ + struct tm tm; /**< time on entry - FIXME merge with + one of entries above, like ctime? */ lsn_t lsn; /**< start logical sector number */ uint32_t size; /**< total size in bytes */ uint32_t secsize; /**< number of sectors allocated */ diff --git a/lib/iso9660/rock.c b/lib/iso9660/rock.c index 71e1e881..9fa97772 100644 --- a/lib/iso9660/rock.c +++ b/lib/iso9660/rock.c @@ -1,5 +1,5 @@ /* - $Id: rock.c,v 1.1 2005/02/13 22:03:00 rocky Exp $ + $Id: rock.c,v 1.2 2005/02/14 02:18:58 rocky Exp $ Copyright (C) 2005 Rocky Bernstein Adapted from GNU/Linux fs/isofs/rock.c (C) 1992, 1993 Eric Youngdale @@ -224,32 +224,33 @@ parse_rock_ridge_stat_internal(iso9660_dir_t *de, } break; #endif -#if TIME_FINISHED +#ifdef TIME_FIXED case SIG('T','F'): { int cnt = 0; /* Rock ridge never appears on a High Sierra disk */ /* Some RRIP writers incorrectly place ctime in the ISO_ROCK_TF_CREATE field. Try to handle this correctly for either case. */ - if(rr->u.TF.flags & ISO_ROCK_TF_CREATE) { - p_stat->i_ctime.tv_sec = iso_date(rr->u.TF.times[cnt++].time, 0); - p_stat->i_ctime.tv_nsec = 0; + /*** FIXME: + Test on long format or not and use + iso9660_get_dtime or iso9660_get_ltime - which needs to be + written. + */ + if (rr->u.TF.flags & ISO_ROCK_TF_CREATE) { + p_stat->st_ctime = rr->u.TF.times[cnt++].time; } if(rr->u.TF.flags & ISO_ROCK_TF_MODIFY) { - p_stat->i_mtime.tv_sec = iso_date(rr->u.TF.times[cnt++].time, 0); - p_stat->i_mtime.tv_nsec = 0; + p_stat->st_mtime = rr->u.TF.times[cnt++].time; } if(rr->u.TF.flags & ISO_ROCK_TF_ACCESS) { - p_stat->i_atime.tv_sec = iso_date(rr->u.TF.times[cnt++].time, 0); - p_stat->i_atime.tv_nsec = 0; + p_stat->st_atime = rr->u.TF.times[cnt++].time; } if(rr->u.TF.flags & ISO_ROCK_TF_ATTRIBUTES) { - p_stat->i_ctime.tv_sec = iso_date(rr->u.TF.times[cnt++].time, 0); - p_stat->i_ctime.tv_nsec = 0; + p_stat->st_ctime = rr->u.TF.times[cnt++].time; } break; } -#endif /* TIME_FINISHED */ +#endif case SIG('S','L'): {int slen; iso_rock_sl_part_t *slp;