summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usr.sbin/burncd/Makefile2
-rw-r--r--usr.sbin/burncd/burncd.c49
2 files changed, 28 insertions, 23 deletions
diff --git a/usr.sbin/burncd/Makefile b/usr.sbin/burncd/Makefile
index bb73d9a..22423e4 100644
--- a/usr.sbin/burncd/Makefile
+++ b/usr.sbin/burncd/Makefile
@@ -1,7 +1,7 @@
# $FreeBSD$
PROG= burncd
-WARNS?= 2
+WARNS?= 5
NO_WERROR= yes
MAN= burncd.8
diff --git a/usr.sbin/burncd/burncd.c b/usr.sbin/burncd/burncd.c
index ba9ceda..3bd37fa 100644
--- a/usr.sbin/burncd/burncd.c
+++ b/usr.sbin/burncd/burncd.c
@@ -29,6 +29,7 @@
*/
#include <unistd.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -56,13 +57,13 @@ struct track_info {
int addr;
};
static struct track_info tracks[100];
-static int fd, quiet, verbose, saved_block_size, notracks;
+static int global_fd_for_cleanup, quiet, verbose, saved_block_size, notracks;
void add_track(char *, int, int, int);
-void do_DAO(int, int);
-void do_TAO(int, int, int);
+void do_DAO(int fd, int, int);
+void do_TAO(int fd, int, int, int);
void do_format(int, int, char *);
-int write_file(struct track_info *);
+int write_file(int fd, struct track_info *);
int roundup_blocks(struct track_info *);
void cue_ent(struct cdr_cue_entry *, int, int, int, int, int, int, int);
void cleanup(int);
@@ -71,7 +72,7 @@ void usage(void);
int
main(int argc, char **argv)
{
- int ch, arg, addr;
+ int arg, addr, ch, fd;
int dao = 0, eject = 0, fixate = 0, list = 0, multi = 0, preemp = 0;
int nogap = 0, speed = 4 * 177, test_write = 0, force = 0;
int block_size = 0, block_type = 0, cdopen = 0, dvdrw = 0;
@@ -151,6 +152,7 @@ main(int argc, char **argv)
if (ioctl(fd, CDRIOCWRITESPEED, &speed) < 0)
err(EX_IOERR, "ioctl(CDRIOCWRITESPEED)");
+ global_fd_for_cleanup = fd;
err_set_exit(cleanup);
for (arg = 0; arg < argc; arg++) {
@@ -291,9 +293,9 @@ main(int argc, char **argv)
cdopen = 1;
}
if (dao)
- do_DAO(test_write, multi);
+ do_DAO(fd, test_write, multi);
else
- do_TAO(test_write, preemp, dvdrw);
+ do_TAO(fd, test_write, preemp, dvdrw);
}
if (fixate && !dao) {
if (!quiet)
@@ -367,7 +369,7 @@ add_track(char *name, int block_size, int block_type, int nogap)
}
void
-do_DAO(int test_write, int multi)
+do_DAO(int fd, int test_write, int multi)
{
struct cdr_cuesheet sheet;
struct cdr_cue_entry cue[100];
@@ -459,7 +461,7 @@ do_DAO(int test_write, int multi)
err(EX_IOERR, "ioctl(CDRIOCSENDCUE)");
for (i = 0; i < notracks; i++) {
- if (write_file(&tracks[i]))
+ if (write_file(fd, &tracks[i]))
err(EX_IOERR, "write_file");
}
@@ -467,7 +469,7 @@ do_DAO(int test_write, int multi)
}
void
-do_TAO(int test_write, int preemp, int dvdrw)
+do_TAO(int fd, int test_write, int preemp, int dvdrw)
{
struct cdr_track track;
int i;
@@ -489,7 +491,7 @@ do_TAO(int test_write, int preemp, int dvdrw)
if (!quiet)
fprintf(stderr, "next writeable LBA %d\n",
tracks[i].addr);
- if (write_file(&tracks[i]))
+ if (write_file(fd, &tracks[i]))
err(EX_IOERR, "write_file");
if (ioctl(fd, CDRIOCFLUSH) < 0)
err(EX_IOERR, "ioctl(CDRIOCFLUSH)");
@@ -509,7 +511,7 @@ do_format(int fd, int force, char *type)
err(EX_IOERR, "ioctl(CDRIOCREADFORMATCAPS)");
if (verbose) {
- fprintf(stderr, "format list entries=%d\n",
+ fprintf(stderr, "format list entries=%zd\n",
capacities.length / sizeof(struct cdr_format_capacity));
fprintf(stderr, "current format: blocks=%u type=0x%x block_size=%u\n",
ntohl(capacities.blocks), capacities.type,
@@ -576,7 +578,7 @@ do_format(int fd, int force, char *type)
}
int
-write_file(struct track_info *track_info)
+write_file(int fd, struct track_info *track_info)
{
off_t size, count, filesize;
char buf[2352*BLOCKS];
@@ -591,8 +593,8 @@ write_file(struct track_info *track_info)
lseek(fd, track_info->addr * track_info->block_size, SEEK_SET);
if (verbose)
- fprintf(stderr, "addr = %d size = %qd blocks = %d\n",
- track_info->addr, track_info->file_size,
+ fprintf(stderr, "addr = %d size = %jd blocks = %d\n",
+ track_info->addr, (intmax_t)track_info->file_size,
roundup_blocks(track_info));
if (!quiet) {
@@ -600,8 +602,8 @@ write_file(struct track_info *track_info)
fprintf(stderr, "writing from stdin\n");
else
fprintf(stderr,
- "writing from file %s size %qd KB\n",
- track_info->file_name, filesize);
+ "writing from file %s size %jd KB\n",
+ track_info->file_name, (intmax_t)filesize);
}
size = 0;
@@ -618,8 +620,8 @@ write_file(struct track_info *track_info)
track_info->block_size;
}
if ((res = write(fd, buf, count)) != count) {
- fprintf(stderr, "\nonly wrote %d of %qd bytes err=%d\n",
- res, count, errno);
+ fprintf(stderr, "\nonly wrote %d of %jd bytes: %s\n",
+ res, (intmax_t)count, strerror(errno));
break;
}
size += count;
@@ -627,12 +629,14 @@ write_file(struct track_info *track_info)
if (!quiet) {
int pct;
- fprintf(stderr, "written this track %qd KB", size/1024);
+ fprintf(stderr, "written this track %jd KB",
+ (intmax_t)size/1024);
if (track_info->file != STDIN_FILENO && filesize) {
pct = (size / 1024) * 100 / filesize;
fprintf(stderr, " (%d%%)", pct);
}
- fprintf(stderr, " total %qd KB\r", tot_size/1024);
+ fprintf(stderr, " total %jd KB\r",
+ (intmax_t)tot_size / 1024);
}
if (size >= track_info->file_size)
break;
@@ -669,7 +673,8 @@ cue_ent(struct cdr_cue_entry *cue, int ctl, int adr, int track, int idx,
void
cleanup(int dummy __unused)
{
- if (ioctl(fd, CDRIOCSETBLOCKSIZE, &saved_block_size) < 0)
+ if (ioctl(global_fd_for_cleanup, CDRIOCSETBLOCKSIZE,
+ &saved_block_size) < 0)
err(EX_IOERR, "ioctl(CDRIOCSETBLOCKSIZE)");
}
OpenPOWER on IntegriCloud