compiler warnings about format strings

Wayne Davison wayne at blorf.net
Wed Apr 4 17:56:06 EST 2001


Is anyone bothered by the compiler warnings that indicate that the
format strings don't match the associated variables?  I was, so I cast
most of the objectionable args (pids, uids, gids) to "long", and added
an "l" (el) to the format string.  A single item was cast to an int.

Here's the patch.  If you haven't applied my UseLogin patch, the line
numbers in session.c will be offset by -16 lines.

..wayne..

---8<------8<------8<------8<---cut here--->8------>8------>8------>8---
Index: authfile.c
@@ -519,7 +519,7 @@
 		error("@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @");
 		error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
 		error("Bad ownership or mode(0%3.3o) for '%s'.",
-		    st.st_mode & 0777, filename);
+		    (int)(st.st_mode & 0777), filename);
 		error("It is recommended that your private key files are NOT accessible by others.");
 		return 0;
 	}
Index: serverloop.c
@@ -96,8 +96,8 @@
 	wait_pid = wait((int *) &child_wait_status);
 	if (wait_pid != -1) {
 		if (wait_pid != child_pid)
-			error("Strange, got SIGCHLD and wait returned pid %d but child is %d",
-			      wait_pid, child_pid);
+			error("Strange, got SIGCHLD and wait returned pid %ld but child is %ld",
+			      (long)wait_pid, (long)child_pid);
 		if (WIFEXITED(child_wait_status) ||
 		    WIFSIGNALED(child_wait_status))
 			child_terminated = 1;
@@ -601,8 +601,8 @@
 	} else {
 		/* Check if it matches the process we forked. */
 		if (wait_pid != pid)
-			error("Strange, wait returned pid %d, expected %d",
-			       wait_pid, pid);
+			error("Strange, wait returned pid %ld, expected %ld",
+			       (long)wait_pid, (long)pid);
 	}

 	/* We no longer want our SIGCHLD handler to be called. */
Index: session.c
@@ -1545,12 +1545,12 @@
 	int i;
 	for(i = 0; i < MAX_SESSIONS; i++) {
 		Session *s = &sessions[i];
-		debug("dump: used %d session %d %p channel %d pid %d",
+		debug("dump: used %d session %d %p channel %d pid %ld",
 		    s->used,
 		    s->self,
 		    s,
 		    s->chanid,
-		    s->pid);
+		    (long)s->pid);
 	}
 }

@@ -1591,13 +1591,13 @@
 session_by_pid(pid_t pid)
 {
 	int i;
-	debug("session_by_pid: pid %d", pid);
+	debug("session_by_pid: pid %ld", (long)pid);
 	for(i = 0; i < MAX_SESSIONS; i++) {
 		Session *s = &sessions[i];
 		if (s->used && s->pid == pid)
 			return s;
 	}
-	error("session_by_pid: unknown pid %d", pid);
+	error("session_by_pid: unknown pid %ld", (long)pid);
 	session_dump();
 	return NULL;
 }
@@ -1905,8 +1905,8 @@
 	if (c == NULL)
 		fatal("session_close: session %d: no channel %d",
 		    s->self, s->chanid);
-	debug("session_exit_message: session %d channel %d pid %d",
-	    s->self, s->chanid, s->pid);
+	debug("session_exit_message: session %d channel %d pid %ld",
+	    s->self, s->chanid, (long)s->pid);

 	if (WIFEXITED(status)) {
 		channel_request_start(s->chanid,
@@ -1947,7 +1947,7 @@
 void
 session_free(Session *s)
 {
-	debug("session_free: session %d pid %d", s->self, s->pid);
+	debug("session_free: session %d pid %ld", s->self, (long)s->pid);
 	if (s->term)
 		xfree(s->term);
 	if (s->display)
@@ -1972,7 +1972,7 @@
 {
 	Session *s = session_by_pid(pid);
 	if (s == NULL) {
-		debug("session_close_by_pid: no session for pid %d", s->pid);
+		debug("session_close_by_pid: no session for pid %ld", (long)s->pid);
 		return;
 	}
 	if (s->chanid != -1)
@@ -1996,15 +1996,15 @@
 	channel_cancel_cleanup(s->chanid);
 	s->chanid = -1;

-	debug("session_close_by_channel: channel %d kill %d", id, s->pid);
+	debug("session_close_by_channel: channel %d kill %ld", id, (long)s->pid);
 	if (s->pid == 0) {
 		/* close session immediately */
 		session_close(s);
 	} else {
 		/* notify child, delay session cleanup */
 		if (kill(s->pid, (s->ttyfd == -1) ? SIGTERM : SIGHUP) < 0)
-			error("session_close_by_channel: kill %d: %s",
-			    s->pid, strerror(errno));
+			error("session_close_by_channel: kill %ld: %s",
+			    (long)s->pid, strerror(errno));
 	}
 }

Index: ssh-agent.c
@@ -796,7 +796,7 @@
 		format = c_flag ? "unsetenv %s;\n" : "unset %s;\n";
 		printf(format, SSH_AUTHSOCKET_ENV_NAME);
 		printf(format, SSH_AGENTPID_ENV_NAME);
-		printf("echo Agent pid %d killed;\n", pid);
+		printf("echo Agent pid %ld killed;\n", (long)pid);
 		exit(0);
 	}
 	parent_pid = getpid();
@@ -849,7 +849,7 @@
 			    SSH_AUTHSOCKET_ENV_NAME);
 			printf(format, SSH_AGENTPID_ENV_NAME, pidstrbuf,
 			    SSH_AGENTPID_ENV_NAME);
-			printf("echo Agent pid %d;\n", pid);
+			printf("echo Agent pid %ld;\n", (long)pid);
 			exit(0);
 		}
 		if (setenv(SSH_AUTHSOCKET_ENV_NAME, socket_name, 1) == -1 ||
Index: sshconnect.c
@@ -748,7 +748,7 @@
 	/* Get local user name.  Use it as server user if no user name was given. */
 	pw = getpwuid(original_real_uid);
 	if (!pw)
-		fatal("User id %u not found from user database.", original_real_uid);
+		fatal("User id %lu not found from user database.", (long)original_real_uid);
 	local_user = xstrdup(pw->pw_name);
 	server_user = options.user ? options.user : local_user;

Index: sshd.c
@@ -1053,7 +1053,7 @@
 				if (pid < 0)
 					error("fork: %.100s", strerror(errno));
 				else
-					debug("Forked child %d.", pid);
+					debug("Forked child %ld.", (long)pid);

 				close(startup_p[1]);

Index: sshpty.c
@@ -318,12 +318,12 @@
 	if (st.st_uid != pw->pw_uid || st.st_gid != gid) {
 		if (chown(ttyname, pw->pw_uid, gid) < 0) {
 			if (errno == EROFS && st.st_uid == pw->pw_uid)
-				error("chown(%.100s, %d, %d) failed: %.100s",
-				      ttyname, pw->pw_uid, gid,
+				error("chown(%.100s, %ld, %ld) failed: %.100s",
+				      ttyname, (long)pw->pw_uid, (long)gid,
 				      strerror(errno));
 			else
-				fatal("chown(%.100s, %d, %d) failed: %.100s",
-				      ttyname, pw->pw_uid, gid,
+				fatal("chown(%.100s, %ld, %ld) failed: %.100s",
+				      ttyname, (long)pw->pw_uid, (long)gid,
 				      strerror(errno));
 		}
 	}
@@ -332,11 +332,11 @@
 		if (chmod(ttyname, mode) < 0) {
 			if (errno == EROFS &&
 			    (st.st_mode & (S_IRGRP | S_IROTH)) == 0)
-				error("chmod(%.100s, 0%o) failed: %.100s",
-				      ttyname, mode, strerror(errno));
+				error("chmod(%.100s, 0%lo) failed: %.100s",
+				      ttyname, (long)mode, strerror(errno));
 			else
-				fatal("chmod(%.100s, 0%o) failed: %.100s",
-				      ttyname, mode, strerror(errno));
+				fatal("chmod(%.100s, 0%lo) failed: %.100s",
+				      ttyname, (long)mode, strerror(errno));
 		}
 	}
 }
---8<------8<------8<------8<---cut here--->8------>8------>8------>8---




More information about the openssh-unix-dev mailing list