Module Name: src
Committed By: christos
Date: Fri Oct 22 00:49:16 UTC 2010
Modified Files:
src/usr.sbin/makefs: cd9660.h
src/usr.sbin/makefs/cd9660: cd9660_debug.c cd9660_eltorito.c
cd9660_write.c
Log Message:
- simple fseek->fseeko conversion. probably needs more work.
- use a constant instead of sprinkling 2048 everywhere.
To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/usr.sbin/makefs/cd9660.h
cvs rdiff -u -r1.9 -r1.10 src/usr.sbin/makefs/cd9660/cd9660_debug.c
cvs rdiff -u -r1.12 -r1.13 src/usr.sbin/makefs/cd9660/cd9660_eltorito.c \
src/usr.sbin/makefs/cd9660/cd9660_write.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.h
diff -u src/usr.sbin/makefs/cd9660.h:1.13 src/usr.sbin/makefs/cd9660.h:1.14
--- src/usr.sbin/makefs/cd9660.h:1.13 Sat Jan 10 17:06:29 2009
+++ src/usr.sbin/makefs/cd9660.h Thu Oct 21 20:49:15 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: cd9660.h,v 1.13 2009/01/10 22:06:29 bjh21 Exp $ */
+/* $NetBSD: cd9660.h,v 1.14 2010/10/22 00:49:15 christos Exp $ */
/*
* Copyright (c) 2005 Daniel Watt, Walter Deignan, Ryan Gabrys, Alan
@@ -130,11 +130,12 @@
#define CD9660_TYPE_DIR 0x02
#define CD9660_TYPE_DOT 0x04
#define CD9660_TYPE_DOTDOT 0x08
-#define CD9660_TYPE_VIRTUAL 0x80
+#define CD9660_TYPE_VIRTUAL 0x80
-#define CD9660_INODE_HASH_SIZE 1024
+#define CD9660_INODE_HASH_SIZE 1024
+#define CD9660_SECTOR_SIZE 2048
-#define CD9660_END_PADDING 150
+#define CD9660_END_PADDING 150
/* Slight modification of the ISO structure in iso.h */
typedef struct _iso_directory_record_cd9660 {
@@ -344,7 +345,7 @@
/*** Write Functions ***/
int cd9660_write_image(const char *image);
-int cd9660_copy_file(FILE *, int, const char *);
+int cd9660_copy_file(FILE *, off_t, const char *);
void cd9660_compute_full_filename(cd9660node *, char *, int);
int cd9660_compute_record_size(cd9660node *);
@@ -354,7 +355,7 @@
void debug_print_path_tree(cd9660node *);
void debug_print_volume_descriptor_information(void);
void debug_dump_to_xml_ptentry(path_table_entry *,int, int);
-void debug_dump_to_xml_path_table(FILE *, int, int, int);
+void debug_dump_to_xml_path_table(FILE *, off_t, int, int);
void debug_dump_to_xml(FILE *);
int debug_get_encoded_number(unsigned char *, int);
void debug_dump_integer(const char *, char *,int);
Index: src/usr.sbin/makefs/cd9660/cd9660_debug.c
diff -u src/usr.sbin/makefs/cd9660/cd9660_debug.c:1.9 src/usr.sbin/makefs/cd9660/cd9660_debug.c:1.10
--- src/usr.sbin/makefs/cd9660/cd9660_debug.c:1.9 Thu Jan 8 17:28:45 2009
+++ src/usr.sbin/makefs/cd9660/cd9660_debug.c Thu Oct 21 20:49:15 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: cd9660_debug.c,v 1.9 2009/01/08 22:28:45 bjh21 Exp $ */
+/* $NetBSD: cd9660_debug.c,v 1.10 2010/10/22 00:49:15 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.9 2009/01/08 22:28:45 bjh21 Exp $");
+__RCSID("$NetBSD: cd9660_debug.c,v 1.10 2010/10/22 00:49:15 christos Exp $");
#endif /* !__lint */
#if !HAVE_NBTOOL_CONFIG_H
@@ -153,12 +153,12 @@
debug_print_volume_descriptor_information(void)
{
volume_descriptor *tmp = diskStructure.firstVolumeDescriptor;
- char temp[2048];
+ char temp[CD9660_SECTOR_SIZE];
printf("==Listing Volume Descriptors==\n");
while (tmp != NULL) {
- memset(temp, 0, 2048);
+ memset(temp, 0, CD9660_SECTOR_SIZE);
memcpy(temp, tmp->volumeDescriptorData + 1, 5);
printf("Volume descriptor in sector %i: type %i, ID %s\n",
tmp->sector, tmp->volumeDescriptorData[0], temp);
@@ -199,13 +199,14 @@
}
void
-debug_dump_to_xml_path_table(FILE *fd, int sector, int size, int mode)
+debug_dump_to_xml_path_table(FILE *fd, off_t sector, int size, int mode)
{
path_table_entry pttemp;
int t = 0;
int n = 0;
- fseek(fd, 2048 * sector, SEEK_SET);
+ if (fseeko(fd, CD9660_SECTOR_SIZE * sector, SEEK_SET) == -1)
+ err(1, "fseeko");
while (t < size) {
/* Read fixed data first */
@@ -229,8 +230,8 @@
void
debug_dump_to_xml(FILE *fd)
{
- unsigned char buf[2048];
- int sector;
+ unsigned char buf[CD9660_SECTOR_SIZE];
+ off_t sector;
int t, t2;
struct iso_primary_descriptor primaryVD;
struct _boot_volume_descriptor bootVD;
@@ -240,15 +241,16 @@
/* Display Volume Descriptors */
sector = 16;
do {
- fseek(fd, 2048*sector, SEEK_SET);
- fread(buf, 1, 2048, fd);
+ if (fseeko(fd, CD9660_SECTOR_SIZE * sector, SEEK_SET) == -1)
+ err(1, "fseeko");
+ fread(buf, 1, CD9660_SECTOR_SIZE, fd);
t = (int)((unsigned char)buf[0]);
switch (t) {
case 0:
- memcpy(&bootVD, buf, 2048);
+ memcpy(&bootVD, buf, CD9660_SECTOR_SIZE);
break;
case 1:
- memcpy(&primaryVD, buf, 2048);
+ memcpy(&primaryVD, buf, CD9660_SECTOR_SIZE);
break;
}
debug_dump_to_xml_volume_descriptor(buf, sector);
Index: src/usr.sbin/makefs/cd9660/cd9660_eltorito.c
diff -u src/usr.sbin/makefs/cd9660/cd9660_eltorito.c:1.12 src/usr.sbin/makefs/cd9660/cd9660_eltorito.c:1.13
--- src/usr.sbin/makefs/cd9660/cd9660_eltorito.c:1.12 Sun Jul 27 06:29:32 2008
+++ src/usr.sbin/makefs/cd9660/cd9660_eltorito.c Thu Oct 21 20:49:15 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: cd9660_eltorito.c,v 1.12 2008/07/27 10:29:32 reinoud Exp $ */
+/* $NetBSD: cd9660_eltorito.c,v 1.13 2010/10/22 00:49:15 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.12 2008/07/27 10:29:32 reinoud Exp $");
+__RCSID("$NetBSD: cd9660_eltorito.c,v 1.13 2010/10/22 00:49:15 christos Exp $");
#endif /* !__lint */
#ifdef DEBUG
@@ -506,8 +506,9 @@
struct cd9660_boot_image *t;
/* write boot catalog */
- fseek(fd, diskStructure.boot_catalog_sector * diskStructure.sectorSize,
- SEEK_SET);
+ if (fseeko(fd, (off_t)diskStructure.boot_catalog_sector *
+ diskStructure.sectorSize, SEEK_SET) == -1)
+ err(1, "fseeko");
if (diskStructure.verbose_level > 0) {
printf("Writing boot catalog to sector %d\n",
Index: src/usr.sbin/makefs/cd9660/cd9660_write.c
diff -u src/usr.sbin/makefs/cd9660/cd9660_write.c:1.12 src/usr.sbin/makefs/cd9660/cd9660_write.c:1.13
--- src/usr.sbin/makefs/cd9660/cd9660_write.c:1.12 Sun Nov 22 13:43:27 2009
+++ src/usr.sbin/makefs/cd9660/cd9660_write.c Thu Oct 21 20:49:15 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: cd9660_write.c,v 1.12 2009/11/22 18:43:27 mbalmer Exp $ */
+/* $NetBSD: cd9660_write.c,v 1.13 2010/10/22 00:49:15 christos Exp $ */
/*
* Copyright (c) 2005 Daniel Watt, Walter Deignan, Ryan Gabrys, Alan
@@ -37,18 +37,18 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(__lint)
-__RCSID("$NetBSD: cd9660_write.c,v 1.12 2009/11/22 18:43:27 mbalmer Exp $");
+__RCSID("$NetBSD: cd9660_write.c,v 1.13 2010/10/22 00:49:15 christos Exp $");
#endif /* !__lint */
static int cd9660_write_volume_descriptors(FILE *);
-static int cd9660_write_path_table(FILE *, int, int);
+static int cd9660_write_path_table(FILE *, off_t, int);
static int cd9660_write_path_tables(FILE *);
static int cd9660_write_file(FILE *, cd9660node *);
-static int cd9660_write_filedata(FILE *, int, const unsigned char *, int);
+static int cd9660_write_filedata(FILE *, off_t, const unsigned char *, int);
#if 0
-static int cd9660_write_buffered(FILE *, int, int, const unsigned char*);
+static int cd9660_write_buffered(FILE *, off_t, int, const unsigned char *);
#endif
-static void cd9660_write_rr(FILE *, cd9660node *, int, int);
+static void cd9660_write_rr(FILE *, cd9660node *, off_t, off_t);
/*
* Write the image
@@ -61,7 +61,7 @@
{
FILE *fd;
int status;
- char buf[2048];
+ char buf[CD9660_SECTOR_SIZE];
if ((fd = fopen(image, "w+")) == NULL) {
err(EXIT_FAILURE, "%s: Can't open `%s' for writing", __func__,
@@ -117,7 +117,7 @@
}
/* Write padding bits. This is temporary */
- memset(buf, 0, 2048);
+ memset(buf, 0, CD9660_SECTOR_SIZE);
cd9660_write_filedata(fd, diskStructure.totalSectors - 1, buf, 1);
if (diskStructure.verbose_level > 0)
@@ -144,7 +144,7 @@
int pos;
while (vd_temp != NULL) {
- pos = vd_temp->sector*diskStructure.sectorSize;
+ pos = vd_temp->sector * diskStructure.sectorSize;
cd9660_write_filedata(fd, vd_temp->sector,
vd_temp->volumeDescriptorData, 1);
vd_temp = vd_temp->next;
@@ -161,7 +161,7 @@
* @returns int 1 on success, 0 on failure
*/
static int
-cd9660_write_path_table(FILE *fd, int sector, int mode)
+cd9660_write_path_table(FILE *fd, off_t sector, int mode)
{
int path_table_sectors = CD9660_BLOCKS(diskStructure.sectorSize,
diskStructure.pathTableLength);
@@ -266,7 +266,7 @@
char *buf;
char *temp_file_name;
int ret;
- int working_sector;
+ off_t working_sector;
int cur_sector_offset;
int written;
iso_directory_record_cd9660 temp_record;
@@ -316,7 +316,9 @@
*/
cur_sector_offset = 0;
working_sector = writenode->fileDataSector;
- fseek(fd, working_sector * diskStructure.sectorSize, SEEK_SET);
+ if (fseeko(fd, working_sector * diskStructure.sectorSize,
+ SEEK_SET) == -1)
+ err(1, "fseeko");
/*
* Now loop over children, writing out their directory
@@ -339,9 +341,9 @@
working_sector++;
/* Seek to the next sector. */
- fseek(fd,
- working_sector * diskStructure.sectorSize,
- SEEK_SET);
+ if (fseeko(fd, working_sector *
+ diskStructure.sectorSize, SEEK_SET) == -1)
+ err(1, "fseeko");
}
/* Write out the basic ISO directory record */
written = fwrite(&temp_record, 1,
@@ -350,11 +352,11 @@
cd9660_write_rr(fd, temp,
cur_sector_offset, working_sector);
}
- fseek(fd,
- working_sector * diskStructure.sectorSize +
- cur_sector_offset + temp_record.length[0] -
- temp->su_tail_size,
- SEEK_SET);
+ if (fseeko(fd, working_sector *
+ diskStructure.sectorSize + cur_sector_offset +
+ temp_record.length[0] - temp->su_tail_size,
+ SEEK_SET) == -1)
+ err(1, "fseeko");
if (temp->su_tail_size > 0)
fwrite(temp->su_tail_data, 1,
temp->su_tail_size, fd);
@@ -395,7 +397,7 @@
* is written, the rest should be set to 0.
*/
static int
-cd9660_write_filedata(FILE *fd, int sector, const unsigned char *buf,
+cd9660_write_filedata(FILE *fd, off_t sector, const unsigned char *buf,
int numsecs)
{
off_t curpos;
@@ -403,11 +405,13 @@
curpos = ftello(fd);
- fseek(fd, sector * diskStructure.sectorSize, SEEK_SET);
+ if (fseeko(fd, sector * diskStructure.sectorSize, SEEK_SET) == -1)
+ err(1, "fseeko");
success = fwrite(buf, diskStructure.sectorSize * numsecs, 1, fd);
- fseek(fd, curpos, SEEK_SET);
+ if (fseeko(fd, curpos, SEEK_SET) == -1)
+ err(1, "fseeko");
if (success == 1)
success = diskStructure.sectorSize * numsecs;
@@ -416,22 +420,22 @@
#if 0
static int
-cd9660_write_buffered(FILE *fd, int offset, int buff_len,
+cd9660_write_buffered(FILE *fd, off_t offset, int buff_len,
const unsigned char* buffer)
{
static int working_sector = -1;
- static char buf[2048];
+ static char buf[CD9660_SECTOR_SIZE];
return 0;
}
#endif
int
-cd9660_copy_file(FILE *fd, int start_sector, const char *filename)
+cd9660_copy_file(FILE *fd, off_t start_sector, const char *filename)
{
FILE *rf;
int bytes_read;
- int sector = start_sector;
+ off_t sector = start_sector;
int buf_size = diskStructure.sectorSize;
char *buf;
@@ -448,7 +452,8 @@
if (diskStructure.verbose_level > 1)
printf("Writing file: %s\n",filename);
- fseek(fd, start_sector * diskStructure.sectorSize, SEEK_SET);
+ if (fseeko(fd, start_sector * diskStructure.sectorSize, SEEK_SET) == -1)
+ err(1, "fseeko");
while (!feof(rf)) {
bytes_read = fread(buf,1,buf_size,rf);
@@ -473,13 +478,15 @@
}
static void
-cd9660_write_rr(FILE *fd, cd9660node *writenode, int offset, int sector)
+cd9660_write_rr(FILE *fd, cd9660node *writenode, off_t offset, off_t sector)
{
int in_ca = 0;
struct ISO_SUSP_ATTRIBUTES *myattr;
offset += writenode->isoDirRecord->length[0];
- fseek(fd, sector * diskStructure.sectorSize + offset, SEEK_SET);
+ if (fseeko(fd, sector * diskStructure.sectorSize + offset, SEEK_SET) ==
+ -1)
+ err(1, "fseeko");
/* Offset now points at the end of the record */
TAILQ_FOREACH(myattr, &writenode->head, rr_ll) {
fwrite(&(myattr->attr), CD9660_SUSP_ENTRY_SIZE(myattr), 1, fd);
@@ -491,11 +498,12 @@
* Point the offset to the start of this
* record's CE area
*/
- fseek(fd, (diskStructure.
- susp_continuation_area_start_sector *
- diskStructure.sectorSize)
+ if (fseeko(fd, ((off_t)diskStructure.
+ susp_continuation_area_start_sector *
+ diskStructure.sectorSize)
+ writenode->susp_entry_ce_start,
- SEEK_SET);
+ SEEK_SET) == -1)
+ err(1, "fseeko");
in_ca = 1;
}
}
@@ -506,5 +514,7 @@
* where we should be.
*/
if (in_ca)
- fseek(fd, sector * diskStructure.sectorSize + offset, SEEK_SET);
+ if (fseeko(fd, sector * diskStructure.sectorSize + offset,
+ SEEK_SET) == -1)
+ err(1, "fseeko");
}