diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c
index e633d0c18fee85aac2e639f4d40128b72f0de2ad..c9007eded92a6b9a99f003e018307dcda0e8e665 100644
--- a/src/bin/pg_ctl/pg_ctl.c
+++ b/src/bin/pg_ctl/pg_ctl.c
@@ -1934,8 +1934,10 @@ adjust_data_dir(void)
 	pclose(fd);
 	free(my_exec_path);
 
-	if (strlen(filename) > 0 && filename[strlen(filename) - 1] == '\n')
-		filename[strlen(filename) - 1] = '\0';
+	/* Remove trailing newline */
+	if (strchr(filename, '\n') != NULL)
+		*strchr(filename, '\n') = '\0';
+
 	free(pg_data);
 	pg_data = xstrdup(filename);
 	canonicalize_path(pg_data);