svn commit: r356725 - head/usr.bin/diff

Ian Lepore ian at freebsd.org
Tue Jan 14 15:44:34 UTC 2020


On Tue, 2020-01-14 at 08:22 +0000, Baptiste Daroussin wrote:
> Author: bapt
> Date: Tue Jan 14 08:22:28 2020
> New Revision: 356725
> URL: https://svnweb.freebsd.org/changeset/base/356725
> 
> Log:
>   When system calls indicate an error they return -1, not some
> arbitrary
>   value < 0.  errno is only updated in this case.
>   

What's the point of these changes, other than almost certainly leading
to worse code generation?

In most instruction sets, you can test for a value < 0 without using
any instructions, you only need to examine the condition flags after
loading the value.  To compare equal to -1 typically requires at least
1 extra instruction, and on risc architectures typically at least two
extra (load -1 to a register then compare).

-- Ian


>   Obtained from:	OpenBSD
>   MFC after:	3 days
> 
> Modified:
>   head/usr.bin/diff/diff.c
>   head/usr.bin/diff/diffreg.c
> 
> Modified: head/usr.bin/diff/diff.c
> =====================================================================
> =========
> --- head/usr.bin/diff/diff.c	Tue Jan 14 08:18:04 2020	(r356724)
> +++ head/usr.bin/diff/diff.c	Tue Jan 14 08:22:28 2020	(r356725)
> @@ -1,4 +1,4 @@
> -/*	$OpenBSD: diff.c,v 1.65 2015/12/29 19:04:46 gsoares Exp $	*/
> +/*	$OpenBSD: diff.c,v 1.67 2019/06/28 13:35:00 deraadt Exp $	*/
>  
>  /*
>   * Copyright (c) 2003 Todd C. Miller <Todd.Miller at courtesan.com>
> @@ -316,12 +316,12 @@ main(int argc, char **argv)
>  	} else {
>  		if (S_ISDIR(stb1.st_mode)) {
>  			argv[0] = splice(argv[0], argv[1]);
> -			if (stat(argv[0], &stb1) < 0)
> +			if (stat(argv[0], &stb1) == -1)
>  				err(2, "%s", argv[0]);
>  		}
>  		if (S_ISDIR(stb2.st_mode)) {
>  			argv[1] = splice(argv[1], argv[0]);
> -			if (stat(argv[1], &stb2) < 0)
> +			if (stat(argv[1], &stb2) == -1)
>  				err(2, "%s", argv[1]);
>  		}
>  		print_status(diffreg(argv[0], argv[1], dflags, 1),
> argv[0],
> 
> Modified: head/usr.bin/diff/diffreg.c
> =====================================================================
> =========
> --- head/usr.bin/diff/diffreg.c	Tue Jan 14 08:18:04 2020	(r356
> 724)
> +++ head/usr.bin/diff/diffreg.c	Tue Jan 14 08:22:28 2020	(r356
> 725)
> @@ -1,4 +1,4 @@
> -/*	$OpenBSD: diffreg.c,v 1.92 2019/06/28 05:35:34 deraadt Exp $	
> */
> +/*	$OpenBSD: diffreg.c,v 1.93 2019/06/28 13:35:00 deraadt Exp $	
> */
>  
>  /*-
>   * SPDX-License-Identifier: BSD-4-Clause
> @@ -277,7 +277,7 @@ diffreg(char *file1, char *file2, int flags, int
> capsi
>  	else {
>  		if (!S_ISREG(stb1.st_mode)) {
>  			if ((f1 = opentemp(file1)) == NULL ||
> -			    fstat(fileno(f1), &stb1) < 0) {
> +			    fstat(fileno(f1), &stb1) == -1) {
>  				warn("%s", file1);
>  				status |= 2;
>  				goto closem;
> @@ -298,7 +298,7 @@ diffreg(char *file1, char *file2, int flags, int
> capsi
>  	else {
>  		if (!S_ISREG(stb2.st_mode)) {
>  			if ((f2 = opentemp(file2)) == NULL ||
> -			    fstat(fileno(f2), &stb2) < 0) {
> +			    fstat(fileno(f2), &stb2) == -1) {
>  				warn("%s", file2);
>  				status |= 2;
>  				goto closem;
> @@ -446,7 +446,7 @@ opentemp(const char *f)
>  
>  	if (strcmp(f, "-") == 0)
>  		ifd = STDIN_FILENO;
> -	else if ((ifd = open(f, O_RDONLY, 0644)) < 0)
> +	else if ((ifd = open(f, O_RDONLY, 0644)) == -1)
>  		return (NULL);
>  
>  	(void)strlcpy(tempfile, _PATH_TMP "/diff.XXXXXXXX",
> sizeof(tempfile));
> @@ -942,7 +942,7 @@ preadline(int fd, size_t rlen, off_t off)
>  	ssize_t nr;
>  
>  	line = xmalloc(rlen + 1);
> -	if ((nr = pread(fd, line, rlen, off)) < 0)
> +	if ((nr = pread(fd, line, rlen, off)) == -1)
>  		err(2, "preadline");
>  	if (nr > 0 && line[nr-1] == '\n')
>  		nr--;




More information about the svn-src-all mailing list