Module Name:    src
Committed By:   christos
Date:           Wed Oct 27 18:51:35 UTC 2010

Modified Files:
        src/usr.sbin/makefs: cd9660.c cd9660.h
        src/usr.sbin/makefs/cd9660: cd9660_debug.c cd9660_eltorito.c

Log Message:
Handle > 2GB images. Thanks to Greg Troxel for testing!


To generate a diff of this commit:
cvs rdiff -u -r1.26 -r1.27 src/usr.sbin/makefs/cd9660.c
cvs rdiff -u -r1.14 -r1.15 src/usr.sbin/makefs/cd9660.h
cvs rdiff -u -r1.10 -r1.11 src/usr.sbin/makefs/cd9660/cd9660_debug.c
cvs rdiff -u -r1.13 -r1.14 src/usr.sbin/makefs/cd9660/cd9660_eltorito.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/makefs/cd9660.c
diff -u src/usr.sbin/makefs/cd9660.c:1.26 src/usr.sbin/makefs/cd9660.c:1.27
--- src/usr.sbin/makefs/cd9660.c:1.26	Fri Jan 16 13:02:24 2009
+++ src/usr.sbin/makefs/cd9660.c	Wed Oct 27 14:51:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: cd9660.c,v 1.26 2009/01/16 18:02:24 pooka Exp $	*/
+/*	$NetBSD: cd9660.c,v 1.27 2010/10/27 18:51:34 christos Exp $	*/
 
 /*
  * Copyright (c) 2005 Daniel Watt, Walter Deignan, Ryan Gabrys, Alan
@@ -103,7 +103,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(__lint)
-__RCSID("$NetBSD: cd9660.c,v 1.26 2009/01/16 18:02:24 pooka Exp $");
+__RCSID("$NetBSD: cd9660.c,v 1.27 2010/10/27 18:51:34 christos Exp $");
 #endif  /* !__lint */
 
 #include <string.h>
@@ -158,7 +158,7 @@
 #endif
 static int cd9660_convert_filename(const char *, char *, int);
 static void cd9660_populate_dot_records(cd9660node *);
-static int cd9660_compute_offsets(cd9660node *, int);
+static int64_t cd9660_compute_offsets(cd9660node *, int64_t);
 #if 0
 static int cd9660_copy_stat_info(cd9660node *, cd9660node *, int);
 #endif
@@ -451,11 +451,11 @@
 cd9660_makefs(const char *image, const char *dir, fsnode *root,
 	      fsinfo_t *fsopts)
 {
-	int startoffset;
+	int64_t startoffset;
 	int numDirectories;
-	int pathTableSectors;
-	int firstAvailableSector;
-	int totalSpace;
+	uint64_t pathTableSectors;
+	int64_t firstAvailableSector;
+	int64_t totalSpace;
 	int error;
 	cd9660node *real_root;
 
@@ -563,7 +563,7 @@
 	    diskStructure.primaryBigEndianTableSector + pathTableSectors;
 	if (diskStructure.verbose_level > 0)
 		printf("cd9660_makefs: Path table conversion complete. "
-		       "Each table is %i bytes, or %i sectors.\n",
+		       "Each table is %i bytes, or %" PRIu64 " sectors.\n",
 		    diskStructure.pathTableLength, pathTableSectors);
 
 	startoffset = diskStructure.sectorSize*diskStructure.dataFirstSector;
@@ -592,11 +592,12 @@
 	/* Debugging output */
 	if (diskStructure.verbose_level > 0) {
 		printf("cd9660_makefs: Sectors 0-15 reserved\n");
-		printf("cd9660_makefs: Primary path tables starts in sector %i\n",
-			diskStructure.primaryLittleEndianTableSector);
-		printf("cd9660_makefs: File data starts in sector %i\n",
-			diskStructure.dataFirstSector);
-		printf("cd9660_makefs: Total sectors: %i\n",diskStructure.totalSectors);
+		printf("cd9660_makefs: Primary path tables starts in sector %"
+		    PRId64 "\n", diskStructure.primaryLittleEndianTableSector);
+		printf("cd9660_makefs: File data starts in sector %"
+		    PRId64 "\n", diskStructure.dataFirstSector);
+		printf("cd9660_makefs: Total sectors: %"
+		    PRId64 "\n", diskStructure.totalSectors);
 	}
 
 	/*
@@ -1822,19 +1823,19 @@
  * @returns int The total size of files and directory entries (should be
  *              a multiple of sector size)
 */
-static int
-cd9660_compute_offsets(cd9660node *node, int startOffset)
+static int64_t
+cd9660_compute_offsets(cd9660node *node, int64_t startOffset)
 {
 	/*
 	 * This function needs to compute the size of directory records and
 	 * runs, file lengths, and set the appropriate variables both in
 	 * cd9660node and isoDirEntry
 	 */
-	int used_bytes = 0;
-	int current_sector_usage = 0;
+	int64_t used_bytes = 0;
+	int64_t current_sector_usage = 0;
 	cd9660node *child;
 	fsinode *inode;
-	int r;
+	int64_t r;
 
 	assert(node != NULL);
 

Index: src/usr.sbin/makefs/cd9660.h
diff -u src/usr.sbin/makefs/cd9660.h:1.14 src/usr.sbin/makefs/cd9660.h:1.15
--- src/usr.sbin/makefs/cd9660.h:1.14	Thu Oct 21 20:49:15 2010
+++ src/usr.sbin/makefs/cd9660.h	Wed Oct 27 14:51:34 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: cd9660.h,v 1.14 2010/10/22 00:49:15 christos Exp $	*/
+/*	$NetBSD: cd9660.h,v 1.15 2010/10/27 18:51:34 christos Exp $	*/
 
 /*
  * Copyright (c) 2005 Daniel Watt, Walter Deignan, Ryan Gabrys, Alan
@@ -181,10 +181,7 @@
 	 */
 	int64_t fileDataLength;
 
-	/*
-	 * XXXfvdl sectors are int
-	 */
-	int fileSectorsUsed;
+	int64_t fileSectorsUsed;
 	int fileRecordSize;/*copy of a variable, int for quicker calculations*/
 
 	/* Old name, used for renaming - needs to be optimized but low priority */
@@ -196,21 +193,21 @@
 	/* For Rock Ridge */
 	struct _cd9660node *rr_real_parent, *rr_relocated;
 
-	int susp_entry_size;
-	int susp_dot_entry_size;
-	int susp_dot_dot_entry_size;
+	int64_t susp_entry_size;
+	int64_t susp_dot_entry_size;
+	int64_t susp_dot_dot_entry_size;
 
 	/* Continuation area stuff */
-	int susp_entry_ce_start;
-	int susp_dot_ce_start;
-	int susp_dot_dot_ce_start;
-
-	int susp_entry_ce_length;
-	int susp_dot_ce_length;
-	int susp_dot_dot_ce_length;
+	int64_t susp_entry_ce_start;
+	int64_t susp_dot_ce_start;
+	int64_t susp_dot_dot_ce_start;
+
+	int64_t susp_entry_ce_length;
+	int64_t susp_dot_ce_length;
+	int64_t susp_dot_dot_ce_length;
 
 	/* Data to put at the end of the System Use field */
-	int su_tail_size;
+	int64_t su_tail_size;
 	char *su_tail_data;
 
 	/*** PATH TABLE STUFF ***/
@@ -234,7 +231,7 @@
 typedef struct _volume_descriptor
 {
 	u_char *volumeDescriptorData; /*ALWAYS 2048 bytes long*/
-	int sector;
+	int64_t sector;
 	struct _volume_descriptor *next;
 } volume_descriptor;
 
@@ -251,22 +248,22 @@
 
 	/* Important sector numbers here */
 	/* primaryDescriptor.type_l_path_table*/
-	int primaryBigEndianTableSector;
+	int64_t primaryBigEndianTableSector;
 
 	/* primaryDescriptor.type_m_path_table*/
-	int primaryLittleEndianTableSector;
+	int64_t primaryLittleEndianTableSector;
 
 	/* primaryDescriptor.opt_type_l_path_table*/
-	int secondaryBigEndianTableSector;
+	int64_t secondaryBigEndianTableSector;
 
 	/* primaryDescriptor.opt_type_m_path_table*/
-	int secondaryLittleEndianTableSector;
+	int64_t secondaryLittleEndianTableSector;
 
 	/* primaryDescriptor.path_table_size*/
 	int pathTableLength;
-	int dataFirstSector;
+	int64_t dataFirstSector;
 
-	int totalSectors;
+	int64_t totalSectors;
 	/* OPTIONS GO HERE */
 	int	isoLevel;
 
@@ -278,9 +275,9 @@
 	int keep_bad_images;
 
 	/* SUSP options and variables */
-	int susp_continuation_area_start_sector;
-	int susp_continuation_area_size;
-	int susp_continuation_area_current_free;
+	int64_t susp_continuation_area_start_sector;
+	int64_t susp_continuation_area_size;
+	int64_t susp_continuation_area_current_free;
 
 	int rock_ridge_enabled;
 	/* Other Rock Ridge Variables */
@@ -304,7 +301,7 @@
 	char *generic_bootimage;
 
 	int is_bootable;/* Default to 0 */
-	int boot_catalog_sector;
+	int64_t boot_catalog_sector;
 	boot_volume_descriptor *boot_descriptor;
 	char * boot_image_directory;
 

Index: src/usr.sbin/makefs/cd9660/cd9660_debug.c
diff -u src/usr.sbin/makefs/cd9660/cd9660_debug.c:1.10 src/usr.sbin/makefs/cd9660/cd9660_debug.c:1.11
--- src/usr.sbin/makefs/cd9660/cd9660_debug.c:1.10	Thu Oct 21 20:49:15 2010
+++ src/usr.sbin/makefs/cd9660/cd9660_debug.c	Wed Oct 27 14:51:35 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: cd9660_debug.c,v 1.10 2010/10/22 00:49:15 christos Exp $	*/
+/*	$NetBSD: cd9660_debug.c,v 1.11 2010/10/27 18:51:35 christos Exp $	*/
 
 /*
  * Copyright (c) 2005 Daniel Watt, Walter Deignan, Ryan Gabrys, Alan
@@ -40,7 +40,7 @@
 #include <sys/param.h>
 
 #if defined(__RCSID) && !defined(__lint)
-__RCSID("$NetBSD: cd9660_debug.c,v 1.10 2010/10/22 00:49:15 christos Exp $");
+__RCSID("$NetBSD: cd9660_debug.c,v 1.11 2010/10/27 18:51:35 christos Exp $");
 #endif  /* !__lint */
 
 #if !HAVE_NBTOOL_CONFIG_H
@@ -105,12 +105,12 @@
 		printf("..(%i)\n",
 		    isonum_733(node->isoDirRecord->extent));
 	} else if (node->isoDirRecord->name[0]=='\0') {
-		printf("(ROOT) (%i to %i)\n",
+		printf("(ROOT) (%" PRIu32 " to %" PRId64 ")\n",
 		    node->fileDataSector,
 		    node->fileDataSector +
 			node->fileSectorsUsed - 1);
 	} else {
-		printf("%s (%s) (%i to %i)\n",
+		printf("%s (%s) (%" PRIu32 " to %" PRId64 ")\n",
 		    node->isoDirRecord->name,
 		    (node->isoDirRecord->flags[0]
 			& ISO_FLAG_DIRECTORY) ?  "DIR" : "FILE",
@@ -160,7 +160,8 @@
 	while (tmp != NULL) {
 		memset(temp, 0, CD9660_SECTOR_SIZE);
 		memcpy(temp, tmp->volumeDescriptorData + 1, 5);
-		printf("Volume descriptor in sector %i: type %i, ID %s\n",
+		printf("Volume descriptor in sector %" PRId64
+		    ": type %i, ID %s\n",
 		    tmp->sector, tmp->volumeDescriptorData[0], temp);
 		switch(tmp->volumeDescriptorData[0]) {
 		case 0:/*boot record*/

Index: src/usr.sbin/makefs/cd9660/cd9660_eltorito.c
diff -u src/usr.sbin/makefs/cd9660/cd9660_eltorito.c:1.13 src/usr.sbin/makefs/cd9660/cd9660_eltorito.c:1.14
--- src/usr.sbin/makefs/cd9660/cd9660_eltorito.c:1.13	Thu Oct 21 20:49:15 2010
+++ src/usr.sbin/makefs/cd9660/cd9660_eltorito.c	Wed Oct 27 14:51:35 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: cd9660_eltorito.c,v 1.13 2010/10/22 00:49:15 christos Exp $	*/
+/*	$NetBSD: cd9660_eltorito.c,v 1.14 2010/10/27 18:51:35 christos Exp $	*/
 
 /*
  * Copyright (c) 2005 Daniel Watt, Walter Deignan, Ryan Gabrys, Alan
@@ -36,7 +36,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(__lint)
-__RCSID("$NetBSD: cd9660_eltorito.c,v 1.13 2010/10/22 00:49:15 christos Exp $");
+__RCSID("$NetBSD: cd9660_eltorito.c,v 1.14 2010/10/27 18:51:35 christos Exp $");
 #endif  /* !__lint */
 
 #ifdef DEBUG
@@ -511,7 +511,7 @@
 		err(1, "fseeko");
 
 	if (diskStructure.verbose_level > 0) {
-		printf("Writing boot catalog to sector %d\n",
+		printf("Writing boot catalog to sector %" PRId64 "\n",
 		    diskStructure.boot_catalog_sector);
 	}
 	LIST_FOREACH(e, &diskStructure.boot_entries, ll_struct) {

Reply via email to