diff --git a/src/files.c b/src/files.c
index 155dd0dbff9e9f44e7fc59eeed1d94a32335a5f2..86aac711d372ef508ba8ec7a03b9bc10d0322675 100644
--- a/src/files.c
+++ b/src/files.c
@@ -3040,7 +3040,6 @@ void save_history(void)
 void save_poshistory(void)
 {
     char *poshist = poshistfilename();
-    char *statusstr = NULL;
     poshiststruct *posptr;
     FILE *hist;
 
@@ -3056,23 +3055,25 @@ void save_poshistory(void)
 	chmod(poshist, S_IRUSR | S_IWUSR);
 
 	for (posptr = position_history; posptr != NULL; posptr = posptr->next) {
+	    char *path_and_location;
 	    size_t length;
 
 	    /* Assume 20 decimal positions each for line and column number,
 	     * plus two spaces, plus the line feed, plus the null byte. */
-	    statusstr = charalloc(strlen(posptr->filename) + 44);
-	    sprintf(statusstr, "%s %ld %ld\n", posptr->filename, (long)posptr->lineno,
-			(long)posptr->xno);
-	    length = strlen(statusstr);
+	    path_and_location = charalloc(strlen(posptr->filename) + 44);
+	    sprintf(path_and_location, "%s %ld %ld\n", posptr->filename,
+			(long)posptr->lineno, (long)posptr->xno);
+	    length = strlen(path_and_location);
 
 	    /* Encode newlines in filenames as nulls. */
-	    sunder(statusstr);
+	    sunder(path_and_location);
 	    /* Restore the terminating newline. */
-	    statusstr[length - 1] = '\n';
+	    path_and_location[length - 1] = '\n';
 
-	    if (fwrite(statusstr, sizeof(char), length, hist) < length)
-		fprintf(stderr, _("Error writing %s: %s\n"), poshist, strerror(errno));
-	    free(statusstr);
+	    if (fwrite(path_and_location, sizeof(char), length, hist) < length)
+		fprintf(stderr, _("Error writing %s: %s\n"),
+					poshist, strerror(errno));
+	    free(path_and_location);
 	}
 	fclose(hist);
     }