[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Nano-devel] [PATCH 2/2] tweaks: don't construct the positions-history f
From: |
Benno Schulenberg |
Subject: |
[Nano-devel] [PATCH 2/2] tweaks: don't construct the positions-history filename time and again |
Date: |
Thu, 2 Nov 2017 20:31:32 +0100 |
---
src/history.c | 38 ++++++++++++++------------------------
1 file changed, 14 insertions(+), 24 deletions(-)
diff --git a/src/history.c b/src/history.c
index e277602d..689e8461 100644
--- a/src/history.c
+++ b/src/history.c
@@ -42,6 +42,8 @@ static bool history_changed = FALSE;
/* Whether any of the history lists has changed. */
static struct stat stat_of_positions_file;
/* The last-obtained stat information of the positions file. */
+static char *poshistname = NULL;
+ /* The name of the positions-history file. */
/* Initialize the lists of historical search and replace strings
* and the list of historical executed commands. */
@@ -287,6 +289,9 @@ bool have_statedir(void)
return FALSE;
}
+ if (ISSET(POS_HISTORY))
+ poshistname = concatenate(statedir, POSITION_HISTORY);
+
return TRUE;
}
@@ -388,26 +393,16 @@ void save_history(void)
free(histname);
}
-/* Update the modification time of the position history file. */
-void update_posfile_timestamp(void)
-{
- char *poshist = concatenate(statedir, POSITION_HISTORY);
-
- stat(poshist, &stat_of_positions_file);
- free(poshist);
-}
-
/* Load the recorded cursor positions for files that were edited. */
void load_poshistory(void)
{
- char *poshist = concatenate(statedir, POSITION_HISTORY);
- FILE *hisfile = fopen(poshist, "rb");
+ FILE *hisfile = fopen(poshistname, "rb");
if (hisfile == NULL) {
if (errno != ENOENT) {
/* When reading failed, don't save history when we quit. */
UNSET(POS_HISTORY);
- history_error(N_("Error reading %s: %s"), poshist, strerror(errno));
+ history_error(N_("Error reading %s: %s"), poshistname,
strerror(errno));
}
} else {
char *line = NULL, *lineptr, *xptr;
@@ -460,23 +455,21 @@ void load_poshistory(void)
fclose(hisfile);
free(line);
- update_posfile_timestamp();
+ stat(poshistname, &stat_of_positions_file);
}
- free(poshist);
}
/* Save the recorded cursor positions for files that were edited. */
void save_poshistory(void)
{
- char *poshist = concatenate(statedir, POSITION_HISTORY);
poshiststruct *posptr;
- FILE *hisfile = fopen(poshist, "wb");
+ FILE *hisfile = fopen(poshistname, "wb");
if (hisfile == NULL)
- fprintf(stderr, _("Error writing %s: %s\n"), poshist, strerror(errno));
+ fprintf(stderr, _("Error writing %s: %s\n"), poshistname,
strerror(errno));
else {
/* Don't allow others to read or write the history file. */
- chmod(poshist, S_IRUSR | S_IWUSR);
+ chmod(poshistname, S_IRUSR | S_IWUSR);
for (posptr = position_history; posptr != NULL; posptr = posptr->next) {
char *path_and_place;
@@ -496,24 +489,21 @@ void save_poshistory(void)
if (fwrite(path_and_place, sizeof(char), length, hisfile) < length)
fprintf(stderr, _("Error writing %s: %s\n"),
- poshist, strerror(errno));
+ poshistname, strerror(errno));
free(path_and_place);
}
fclose(hisfile);
- update_posfile_timestamp();
+ stat(poshistname, &stat_of_positions_file);
}
- free(poshist);
}
/* Reload the position history file if it has been modified since last load. */
void reload_positions_if_needed(void)
{
- char *poshist = concatenate(statedir, POSITION_HISTORY);
struct stat newstat;
- stat(poshist, &newstat);
- free(poshist);
+ stat(poshistname, &newstat);
if (newstat.st_mtime != stat_of_positions_file.st_mtime) {
poshiststruct *ptr, *nextone;
--
2.14.3