Limiting the number of backup files to one hundred thousand, well
before finding a unused filename takes an annoying amount of time. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5225 35c25a1d-7b9e-4130-9fde-d3aeb78583b8master
parent
55d1e1a9b8
commit
f111c0d6ab
|
@ -2,6 +2,10 @@
|
||||||
* src/browser.c (browser_refresh): Take the distant possibility of
|
* src/browser.c (browser_refresh): Take the distant possibility of
|
||||||
terabyte files into account, and in the bargain get rid of the need
|
terabyte files into account, and in the bargain get rid of the need
|
||||||
to calculate the number of digits in UINT_MAX.
|
to calculate the number of digits in UINT_MAX.
|
||||||
|
* src/files.c (get_next_filename): Limit the number of backup files
|
||||||
|
to one hundred thousand -- which should be far more than enough --
|
||||||
|
before finding a unused filename takes an annoying amount of time.
|
||||||
|
* src/utils.c (digits): Delete this now unneeded function.
|
||||||
|
|
||||||
2015-05-03 Benno Schulenberg <bensberg@justemail.net>
|
2015-05-03 Benno Schulenberg <bensberg@justemail.net>
|
||||||
* src/browser.c (browser_refresh): Display an ellipsis only when the
|
* src/browser.c (browser_refresh): Display an ellipsis only when the
|
||||||
|
|
20
src/files.c
20
src/files.c
|
@ -991,20 +991,17 @@ int open_file(const char *filename, bool newfie, bool quiet, FILE **f)
|
||||||
* extension exists, we return "". */
|
* extension exists, we return "". */
|
||||||
char *get_next_filename(const char *name, const char *suffix)
|
char *get_next_filename(const char *name, const char *suffix)
|
||||||
{
|
{
|
||||||
static int ulmax_digits = -1;
|
|
||||||
unsigned long i = 0;
|
unsigned long i = 0;
|
||||||
char *buf;
|
char *buf;
|
||||||
size_t namelen, suffixlen;
|
size_t wholenamelen;
|
||||||
|
|
||||||
assert(name != NULL && suffix != NULL);
|
assert(name != NULL && suffix != NULL);
|
||||||
|
|
||||||
if (ulmax_digits == -1)
|
wholenamelen = strlen(name) + strlen(suffix);
|
||||||
ulmax_digits = digits(ULONG_MAX);
|
|
||||||
|
|
||||||
namelen = strlen(name);
|
/* Reserve space for: the name plus the suffix plus a dot plus
|
||||||
suffixlen = strlen(suffix);
|
* possibly five digits plus a null byte. */
|
||||||
|
buf = charalloc(wholenamelen + 7);
|
||||||
buf = charalloc(namelen + suffixlen + ulmax_digits + 2);
|
|
||||||
sprintf(buf, "%s%s", name, suffix);
|
sprintf(buf, "%s%s", name, suffix);
|
||||||
|
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
|
@ -1012,11 +1009,12 @@ char *get_next_filename(const char *name, const char *suffix)
|
||||||
|
|
||||||
if (stat(buf, &fs) == -1)
|
if (stat(buf, &fs) == -1)
|
||||||
return buf;
|
return buf;
|
||||||
if (i == ULONG_MAX)
|
|
||||||
|
/* Limit the number of backup files to a hundred thousand. */
|
||||||
|
if (++i == 100000)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
i++;
|
sprintf(buf + wholenamelen, ".%lu", i);
|
||||||
sprintf(buf + namelen + suffixlen, ".%lu", i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We get here only if there is no possible save file. Blank out
|
/* We get here only if there is no possible save file. Blank out
|
||||||
|
|
|
@ -695,7 +695,6 @@ void do_wordlinechar_count(void);
|
||||||
void do_verbatim_input(void);
|
void do_verbatim_input(void);
|
||||||
|
|
||||||
/* All functions in utils.c. */
|
/* All functions in utils.c. */
|
||||||
int digits(size_t n);
|
|
||||||
void get_homedir(void);
|
void get_homedir(void);
|
||||||
bool parse_num(const char *str, ssize_t *val);
|
bool parse_num(const char *str, ssize_t *val);
|
||||||
bool parse_line_column(const char *str, ssize_t *line, ssize_t *column);
|
bool parse_line_column(const char *str, ssize_t *line, ssize_t *column);
|
||||||
|
|
15
src/utils.c
15
src/utils.c
|
@ -30,21 +30,6 @@
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
/* Return the number of decimal digits in n. */
|
|
||||||
int digits(size_t n)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (n == 0)
|
|
||||||
i = 1;
|
|
||||||
else {
|
|
||||||
for (i = 0; n != 0; n /= 10, i++)
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return the user's home directory. We use $HOME, and if that fails,
|
/* Return the user's home directory. We use $HOME, and if that fails,
|
||||||
* we fall back on the home directory of the effective user ID. */
|
* we fall back on the home directory of the effective user ID. */
|
||||||
void get_homedir(void)
|
void get_homedir(void)
|
||||||
|
|
Loading…
Reference in New Issue