Module Name:    src
Committed By:   mlelstv
Date:           Sun Jan  9 06:33:13 UTC 2022

Modified Files:
        src/usr.bin/audio/record: record.c

Log Message:
Let user gracefully abort recording with SIGINT.


To generate a diff of this commit:
cvs rdiff -u -r1.55 -r1.56 src/usr.bin/audio/record/record.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.bin/audio/record/record.c
diff -u src/usr.bin/audio/record/record.c:1.55 src/usr.bin/audio/record/record.c:1.56
--- src/usr.bin/audio/record/record.c:1.55	Tue Jun  1 21:08:48 2021
+++ src/usr.bin/audio/record/record.c	Sun Jan  9 06:33:13 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: record.c,v 1.55 2021/06/01 21:08:48 riastradh Exp $	*/
+/*	$NetBSD: record.c,v 1.56 2022/01/09 06:33:13 mlelstv Exp $	*/
 
 /*
  * Copyright (c) 1999, 2002, 2003, 2005, 2010 Matthew R. Green
@@ -32,7 +32,7 @@
 #include <sys/cdefs.h>
 
 #ifndef lint
-__RCSID("$NetBSD: record.c,v 1.55 2021/06/01 21:08:48 riastradh Exp $");
+__RCSID("$NetBSD: record.c,v 1.56 2022/01/09 06:33:13 mlelstv Exp $");
 #endif
 
 
@@ -68,6 +68,7 @@ static char	*encoding_str;
 static struct track_info ti;
 static struct timeval record_time;
 static struct timeval start_time;
+static int no_time_limit = 1;
 
 static void (*conv_func) (u_char *, int);
 
@@ -75,6 +76,13 @@ static void usage (void) __dead;
 static int timeleft (struct timeval *, struct timeval *);
 static void cleanup (int) __dead;
 static void rewrite_header (void);
+static void stop (int);
+
+static void stop (int sig)
+{
+	no_time_limit = 0;
+	timerclear(&record_time);
+}
 
 int
 main(int argc, char *argv[])
@@ -82,7 +90,7 @@ main(int argc, char *argv[])
 	u_char	*buffer;
 	size_t	len, bufsize = 0;
 	ssize_t	nread;
-	int	ch, no_time_limit = 1;
+	int	ch;
 	const char *defdevice = _PATH_SOUND;
 
 	/*
@@ -284,7 +292,7 @@ main(int argc, char *argv[])
 	if (ioctl(audiofd, AUDIO_SETINFO, &info) < 0)
 		err(1, "failed to set audio info");
 
-	signal(SIGINT, cleanup);
+	signal(SIGINT, stop);
 
 	ti.total_size = 0;
 
@@ -341,14 +349,12 @@ main(int argc, char *argv[])
 		if ((nread = read(audiofd, buffer, bufsize)) == -1)
 			err(1, "read failed");
 		if (nread == 0)
-			errx(1, "read eof");
-		if ((size_t)nread != bufsize)
-			errx(1, "invalid read");
+			break;
 		if (conv_func)
-			(*conv_func)(buffer, bufsize);
-		if ((size_t)write(ti.outfd, buffer, bufsize) != bufsize)
+			(*conv_func)(buffer, nread);
+		if (write(ti.outfd, buffer, nread) != nread)
 			err(1, "write failed");
-		ti.total_size += bufsize;
+		ti.total_size += nread;
 	}
 	cleanup(0);
 }
@@ -391,7 +397,6 @@ rewrite_header(void)
 	/* can't do this here! */
 	if (ti.outfd == STDOUT_FILENO)
 		return;
-
 	if (lseek(ti.outfd, (off_t)0, SEEK_SET) == (off_t)-1)
 		err(1, "could not seek to start of file for header rewrite");
 	write_header(&ti);

Reply via email to