1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-09 00:11:25 +02:00

Improved resizehistents() so that it honors HISTEXPIREDUPSFIRST.

This commit is contained in:
Wayne Davison 2002-02-13 18:13:14 +00:00
parent 8b7c9d40d4
commit c24a38cdaa

View file

@ -913,34 +913,10 @@ gethistent(int ev, int nearmatch)
return he;
}
/**/
Histent
prepnexthistent(void)
static void
putoldhistentryontop(void)
{
Histent he;
int curline_in_ring = hist_ring == &curline;
if (curline_in_ring)
unlinkcurline();
if (hist_ring && hist_ring->flags & HIST_TMPSTORE) {
curhist--;
freehistnode((HashNode)hist_ring);
}
if (histlinect < histsiz) {
he = (Histent)zcalloc(sizeof *he);
if (!hist_ring)
hist_ring = he->up = he->down = he;
else {
he->up = hist_ring;
he->down = hist_ring->down;
hist_ring->down = he->down->up = he;
hist_ring = he;
}
histlinect++;
}
else {
he = hist_ring->down;
Histent he = hist_ring->down;
if (isset(HISTEXPIREDUPSFIRST) && !(he->flags & HIST_DUP)) {
int max_unique_ct = getiparam("SAVEHIST");
do {
@ -958,12 +934,42 @@ prepnexthistent(void)
hist_ring->down = he->down->up = he;
}
}
freehistdata(hist_ring = he, 0);
hist_ring = he;
}
/**/
Histent
prepnexthistent(void)
{
int curline_in_ring = hist_ring == &curline;
if (curline_in_ring)
unlinkcurline();
if (hist_ring && hist_ring->flags & HIST_TMPSTORE) {
curhist--;
freehistnode((HashNode)hist_ring);
}
he->histnum = ++curhist;
if (histlinect < histsiz) {
Histent he = (Histent)zcalloc(sizeof *he);
if (!hist_ring)
hist_ring = he->up = he->down = he;
else {
he->up = hist_ring;
he->down = hist_ring->down;
hist_ring->down = he->down->up = he;
hist_ring = he;
}
histlinect++;
}
else {
putoldhistentryontop();
freehistdata(hist_ring, 0);
}
hist_ring->histnum = ++curhist;
if (curline_in_ring)
linkcurline();
return he;
return hist_ring;
}
/* A helper function for hend() */
@ -1756,8 +1762,10 @@ inithist(void)
void
resizehistents(void)
{
while (histlinect > histsiz)
freehistnode((HashNode)hist_ring->down);
while (histlinect > histsiz) {
putoldhistentryontop();
freehistnode((HashNode)hist_ring);
}
}
/* Remember the last line in the history file so we can find it again. */