Module Name:    src
Committed By:   rillig
Date:           Fri Jun  9 13:31:11 UTC 2023

Modified Files:
        src/usr.bin/xlint/xlint: xlint.c

Log Message:
lint: sort functions in calling order

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.110 -r1.111 src/usr.bin/xlint/xlint/xlint.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/xlint/xlint/xlint.c
diff -u src/usr.bin/xlint/xlint/xlint.c:1.110 src/usr.bin/xlint/xlint/xlint.c:1.111
--- src/usr.bin/xlint/xlint/xlint.c:1.110	Fri Jun  9 13:03:49 2023
+++ src/usr.bin/xlint/xlint/xlint.c	Fri Jun  9 13:31:11 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: xlint.c,v 1.110 2023/06/09 13:03:49 rillig Exp $ */
+/* $NetBSD: xlint.c,v 1.111 2023/06/09 13:31:11 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: xlint.c,v 1.110 2023/06/09 13:03:49 rillig Exp $");
+__RCSID("$NetBSD: xlint.c,v 1.111 2023/06/09 13:31:11 rillig Exp $");
 #endif
 
 #include <sys/param.h>
@@ -127,11 +127,6 @@ static	const	char *currfn;
 #endif
 static const char target_prefix[] = TARGET_PREFIX;
 
-static	void	handle_filename(const char *);
-static	void	run_child(const char *, list *, const char *, int);
-static	void	find_libs(const list *);
-static	bool	file_is_readable(const char *);
-static	void	cat(const list *, const char *);
 
 static void
 list_add_ref(list *l, char *s)
@@ -197,6 +192,17 @@ concat2(const char *s1, const char *s2)
 	return s;
 }
 
+static void
+set_tmpdir(void)
+{
+	const char *tmp;
+	size_t len;
+
+	tmpdir = (tmp = getenv("TMPDIR")) != NULL && (len = strlen(tmp)) != 0
+	    ? concat2(tmp, tmp[len - 1] == '/' ? "" : "/")
+	    : xstrdup(_PATH_TMP);
+}
+
 /* Clean up after a signal or at the regular end. */
 static void __attribute__((__noreturn__))
 terminate(int signo)
@@ -226,32 +232,6 @@ terminate(int signo)
 	exit(signo != 0 ? 1 : 0);
 }
 
-/*
- * Returns a pointer to the last component of path after delim.
- * Returns path if the string does not contain delim.
- */
-static const char *
-lbasename(const char *path, int delim)
-{
-
-	const char *base = path;
-	for (const char *p = path; *p != '\0'; p++)
-		if (*p == delim)
-			base = p + 1;
-	return base;
-}
-
-static void
-set_tmpdir(void)
-{
-	const char *tmp;
-	size_t len;
-
-	tmpdir = (tmp = getenv("TMPDIR")) != NULL && (len = strlen(tmp)) != 0
-	    ? concat2(tmp, tmp[len - 1] == '/' ? "" : "/")
-	    : xstrdup(_PATH_TMP);
-}
-
 static void __attribute__((__noreturn__, __format__(__printf__, 1, 2)))
 usage(const char *fmt, ...)
 {
@@ -282,6 +262,113 @@ usage(const char *fmt, ...)
 	terminate(-1);
 }
 
+/*
+ * Returns a pointer to the last component of path after delim.
+ * Returns path if the string does not contain delim.
+ */
+static const char *
+lbasename(const char *path, int delim)
+{
+
+	const char *base = path;
+	for (const char *p = path; *p != '\0'; p++)
+		if (*p == delim)
+			base = p + 1;
+	return base;
+}
+
+static bool
+is_safe_shell(char ch)
+{
+
+	return ch_isalnum(ch) || ch == '%' || ch == '+' || ch == ',' ||
+	       ch == '-' || ch == '.' || ch == '/' || ch == ':' ||
+	       ch == '=' || ch == '@' || ch == '_';
+}
+
+static void
+print_sh_quoted(const char *s)
+{
+
+	if (s[0] == '\0')
+		goto needs_quoting;
+	for (const char *p = s; *p != '\0'; p++)
+		if (!is_safe_shell(*p))
+			goto needs_quoting;
+
+	(void)printf("%s", s);
+	return;
+
+needs_quoting:
+	(void)putchar('\'');
+	for (const char *p = s; *p != '\0'; p++) {
+		if (*p == '\'')
+			(void)printf("'\\''");
+		else
+			(void)putchar(*p);
+	}
+	(void)putchar('\'');
+}
+
+static void
+run_child(const char *path, list *args, const char *crfn, int fdout)
+{
+	int status, rv, signo;
+
+	if (Vflag) {
+		print_sh_quoted(args->items[0]);
+		for (size_t i = 1; i < args->len - 1; i++) {
+			(void)printf(" ");
+			print_sh_quoted(args->items[i]);
+		}
+		(void)printf("\n");
+	}
+
+	currfn = crfn;
+
+	(void)fflush(stdout);
+
+	switch (vfork()) {
+	case -1:
+		warn("cannot fork");
+		terminate(-1);
+		/* NOTREACHED */
+	default:
+		/* parent */
+		break;
+	case 0:
+		/* child */
+
+		/* set up the standard output if necessary */
+		if (fdout != -1) {
+			(void)dup2(fdout, STDOUT_FILENO);
+			(void)close(fdout);
+		}
+		(void)execvp(path, args->items);
+		warn("cannot exec %s", path);
+		_exit(1);
+		/* NOTREACHED */
+	}
+
+	while ((rv = wait(&status)) == -1 && errno == EINTR) ;
+	if (rv == -1) {
+		warn("wait");
+		terminate(-1);
+	}
+	if (WIFSIGNALED(status)) {
+		signo = WTERMSIG(status);
+#if HAVE_DECL_SYS_SIGNAME
+		warnx("%s got SIG%s", path, sys_signame[signo]);
+#else
+		warnx("%s got signal %d", path, signo);
+#endif
+		terminate(-1);
+	}
+	if (WEXITSTATUS(status) != 0)
+		terminate(-1);
+	currfn = NULL;
+}
+
 static void
 run_cpp(const char *name)
 {
@@ -338,6 +425,112 @@ run_lint1(const char *out_fname)
 	list_clear(&args);
 }
 
+/*
+ * Read a file name from the command line
+ * and pass it through lint1 if it is a C source.
+ */
+static void
+handle_filename(const char *name)
+{
+	const char *bn, *suff;
+	char *ofn;
+	size_t len;
+	int fd;
+
+	bn = lbasename(name, '/');
+	suff = lbasename(bn, '.');
+
+	if (strcmp(suff, "ln") == 0) {
+		/* only for lint2 */
+		if (!iflag)
+			list_add(&lint2.infiles, name);
+		return;
+	}
+
+	if (strcmp(suff, "c") != 0 &&
+	    (strncmp(bn, "llib-l", 6) != 0 || bn != suff)) {
+		warnx("unknown file type: %s", name);
+		return;
+	}
+
+	if (!iflag || !first)
+		(void)printf("%s:\n", Fflag ? name : bn);
+
+	/* build the name of the output file of lint1 */
+	if (oflag) {
+		ofn = outputfn;
+		outputfn = NULL;
+		oflag = false;
+	} else if (iflag) {
+		len = bn == suff ? strlen(bn) : (size_t)((suff - 1) - bn);
+		ofn = xasprintf("%.*s.ln", (int)len, bn);
+	} else {
+		ofn = xasprintf("%slint1.XXXXXX", tmpdir);
+		fd = mkstemp(ofn);
+		if (fd == -1) {
+			warn("can't make temp");
+			terminate(-1);
+		}
+		(void)close(fd);
+	}
+	if (!iflag)
+		list_add(&lint1.outfiles, ofn);
+
+	run_cpp(name);
+	run_lint1(ofn);
+
+	list_add(&lint2.infiles, ofn);
+	free(ofn);
+}
+
+static bool
+file_is_readable(const char *path)
+{
+	struct stat sbuf;
+
+	if (stat(path, &sbuf) == -1)
+		return false;
+	if (!S_ISREG(sbuf.st_mode))
+		return false;
+	if (access(path, R_OK) == -1)
+		return false;
+	return true;
+}
+
+static void
+find_lib(const char *lib)
+{
+	char *lfn;
+
+	for (size_t i = 0; i < libsrchpath.len; i++) {
+		const char *dir = libsrchpath.items[i];
+		lfn = xasprintf("%s/llib-l%s.ln", dir, lib);
+		if (file_is_readable(lfn))
+			goto found;
+		free(lfn);
+
+		lfn = xasprintf("%s/lint/llib-l%s.ln", dir, lib);
+		if (file_is_readable(lfn))
+			goto found;
+		free(lfn);
+	}
+
+	warnx("cannot find llib-l%s.ln", lib);
+	return;
+
+found:
+	list_add_ref(&lint2.inlibs, concat2("-l", lfn));
+	free(lfn);
+}
+
+static void
+find_libs(const list *l)
+{
+
+	for (size_t i = 0; i < l->len; i++)
+		find_lib(l->items[i]);
+}
+
 static void
 run_lint2(void)
 {
@@ -353,8 +546,41 @@ run_lint2(void)
 	list_add_all(&args, &lint2.infiles);
 	list_add_ref(&args, NULL);
 
-	run_child(abs_lint2, &args, lint2.outlib, -1);
-	list_clear(&args);
+	run_child(abs_lint2, &args, lint2.outlib, -1);
+	list_clear(&args);
+}
+
+static void
+cat(const list *srcs, const char *dest)
+{
+	int ifd, ofd;
+	ssize_t rlen;
+	char buf[0x4000];
+
+	if ((ofd = open(dest, O_WRONLY | O_CREAT | O_TRUNC, 0666)) == -1) {
+		warn("cannot open %s", dest);
+		terminate(-1);
+	}
+
+	for (size_t i = 0; i < srcs->len; i++) {
+		const char *src = srcs->items[i];
+		if ((ifd = open(src, O_RDONLY)) == -1) {
+			warn("cannot open %s", src);
+			terminate(-1);
+		}
+		do {
+			if ((rlen = read(ifd, buf, sizeof(buf))) == -1) {
+				warn("read error on %s", src);
+				terminate(-1);
+			}
+			if (write(ofd, buf, (size_t)rlen) != rlen) {
+				warn("write error on %s", dest);
+				terminate(-1);
+			}
+		} while (rlen == sizeof(buf));
+		(void)close(ifd);
+	}
+	(void)close(ofd);
 }
 
 int
@@ -621,234 +847,3 @@ main(int argc, char *argv[])
 	terminate(0);
 	/* NOTREACHED */
 }
-
-/*
- * Read a file name from the command line
- * and pass it through lint1 if it is a C source.
- */
-static void
-handle_filename(const char *name)
-{
-	const char *bn, *suff;
-	char *ofn;
-	size_t len;
-	int fd;
-
-	bn = lbasename(name, '/');
-	suff = lbasename(bn, '.');
-
-	if (strcmp(suff, "ln") == 0) {
-		/* only for lint2 */
-		if (!iflag)
-			list_add(&lint2.infiles, name);
-		return;
-	}
-
-	if (strcmp(suff, "c") != 0 &&
-	    (strncmp(bn, "llib-l", 6) != 0 || bn != suff)) {
-		warnx("unknown file type: %s", name);
-		return;
-	}
-
-	if (!iflag || !first)
-		(void)printf("%s:\n", Fflag ? name : bn);
-
-	/* build the name of the output file of lint1 */
-	if (oflag) {
-		ofn = outputfn;
-		outputfn = NULL;
-		oflag = false;
-	} else if (iflag) {
-		len = bn == suff ? strlen(bn) : (size_t)((suff - 1) - bn);
-		ofn = xasprintf("%.*s.ln", (int)len, bn);
-	} else {
-		ofn = xasprintf("%slint1.XXXXXX", tmpdir);
-		fd = mkstemp(ofn);
-		if (fd == -1) {
-			warn("can't make temp");
-			terminate(-1);
-		}
-		(void)close(fd);
-	}
-	if (!iflag)
-		list_add(&lint1.outfiles, ofn);
-
-	run_cpp(name);
-	run_lint1(ofn);
-
-	list_add(&lint2.infiles, ofn);
-	free(ofn);
-}
-
-static bool
-is_safe_shell(char ch)
-{
-
-	return ch_isalnum(ch) || ch == '%' || ch == '+' || ch == ',' ||
-	       ch == '-' || ch == '.' || ch == '/' || ch == ':' ||
-	       ch == '=' || ch == '@' || ch == '_';
-}
-
-static void
-print_sh_quoted(const char *s)
-{
-
-	if (s[0] == '\0')
-		goto needs_quoting;
-	for (const char *p = s; *p != '\0'; p++)
-		if (!is_safe_shell(*p))
-			goto needs_quoting;
-
-	(void)printf("%s", s);
-	return;
-
-needs_quoting:
-	(void)putchar('\'');
-	for (const char *p = s; *p != '\0'; p++) {
-		if (*p == '\'')
-			(void)printf("'\\''");
-		else
-			(void)putchar(*p);
-	}
-	(void)putchar('\'');
-}
-
-static void
-run_child(const char *path, list *args, const char *crfn, int fdout)
-{
-	int status, rv, signo;
-
-	if (Vflag) {
-		print_sh_quoted(args->items[0]);
-		for (size_t i = 1; i < args->len - 1; i++) {
-			(void)printf(" ");
-			print_sh_quoted(args->items[i]);
-		}
-		(void)printf("\n");
-	}
-
-	currfn = crfn;
-
-	(void)fflush(stdout);
-
-	switch (vfork()) {
-	case -1:
-		warn("cannot fork");
-		terminate(-1);
-		/* NOTREACHED */
-	default:
-		/* parent */
-		break;
-	case 0:
-		/* child */
-
-		/* set up the standard output if necessary */
-		if (fdout != -1) {
-			(void)dup2(fdout, STDOUT_FILENO);
-			(void)close(fdout);
-		}
-		(void)execvp(path, args->items);
-		warn("cannot exec %s", path);
-		_exit(1);
-		/* NOTREACHED */
-	}
-
-	while ((rv = wait(&status)) == -1 && errno == EINTR) ;
-	if (rv == -1) {
-		warn("wait");
-		terminate(-1);
-	}
-	if (WIFSIGNALED(status)) {
-		signo = WTERMSIG(status);
-#if HAVE_DECL_SYS_SIGNAME
-		warnx("%s got SIG%s", path, sys_signame[signo]);
-#else
-		warnx("%s got signal %d", path, signo);
-#endif
-		terminate(-1);
-	}
-	if (WEXITSTATUS(status) != 0)
-		terminate(-1);
-	currfn = NULL;
-}
-
-static void
-find_lib(const char *lib)
-{
-	char *lfn;
-
-	for (size_t i = 0; i < libsrchpath.len; i++) {
-		const char *dir = libsrchpath.items[i];
-		lfn = xasprintf("%s/llib-l%s.ln", dir, lib);
-		if (file_is_readable(lfn))
-			goto found;
-		free(lfn);
-
-		lfn = xasprintf("%s/lint/llib-l%s.ln", dir, lib);
-		if (file_is_readable(lfn))
-			goto found;
-		free(lfn);
-	}
-
-	warnx("cannot find llib-l%s.ln", lib);
-	return;
-
-found:
-	list_add_ref(&lint2.inlibs, concat2("-l", lfn));
-	free(lfn);
-}
-
-static void
-find_libs(const list *l)
-{
-
-	for (size_t i = 0; i < l->len; i++)
-		find_lib(l->items[i]);
-}
-
-static bool
-file_is_readable(const char *path)
-{
-	struct stat sbuf;
-
-	if (stat(path, &sbuf) == -1)
-		return false;
-	if (!S_ISREG(sbuf.st_mode))
-		return false;
-	if (access(path, R_OK) == -1)
-		return false;
-	return true;
-}
-
-static void
-cat(const list *srcs, const char *dest)
-{
-	int ifd, ofd;
-	ssize_t rlen;
-	char buf[0x4000];
-
-	if ((ofd = open(dest, O_WRONLY | O_CREAT | O_TRUNC, 0666)) == -1) {
-		warn("cannot open %s", dest);
-		terminate(-1);
-	}
-
-	for (size_t i = 0; i < srcs->len; i++) {
-		const char *src = srcs->items[i];
-		if ((ifd = open(src, O_RDONLY)) == -1) {
-			warn("cannot open %s", src);
-			terminate(-1);
-		}
-		do {
-			if ((rlen = read(ifd, buf, sizeof(buf))) == -1) {
-				warn("read error on %s", src);
-				terminate(-1);
-			}
-			if (write(ofd, buf, (size_t)rlen) != rlen) {
-				warn("write error on %s", dest);
-				terminate(-1);
-			}
-		} while (rlen == sizeof(buf));
-		(void)close(ifd);
-	}
-	(void)close(ofd);
-}

Reply via email to