Lines Matching refs:glh

118 static GlhHashBucket *glh_find_bucket(GlHistory *glh, const char *line,
201 static int _glh_cant_load_history(GlHistory *glh, const char *filename,
203 static int _glh_cant_save_history(GlHistory *glh, const char *message,
208 static void _glh_discard_line(GlHistory *glh, GlhLineNode *node);
209 static GlhLineNode *_glh_find_id(GlHistory *glh, GlhLineID id);
210 static GlhHashNode *_glh_acquire_copy(GlHistory *glh, const char *line,
212 static GlhHashNode *_glh_discard_copy(GlHistory *glh, GlhHashNode *hnode);
213 static int _glh_prepare_for_recall(GlHistory *glh, char *line);
252 GlHistory *glh; /* The object to be returned */ in _new_GlHistory() local
257 glh = (GlHistory *) malloc(sizeof(GlHistory)); in _new_GlHistory()
258 if(!glh) { in _new_GlHistory()
267 glh->err = NULL; in _new_GlHistory()
268 glh->buffer = NULL; in _new_GlHistory()
269 glh->nbuff = (buflen+GLH_SEG_SIZE-1) / GLH_SEG_SIZE; in _new_GlHistory()
270 glh->unused = NULL; in _new_GlHistory()
271 glh->list.node_mem = NULL; in _new_GlHistory()
272 glh->list.head = glh->list.tail = NULL; in _new_GlHistory()
273 glh->recall = NULL; in _new_GlHistory()
274 glh->id_node = NULL; in _new_GlHistory()
275 glh->hash.node_mem = NULL; in _new_GlHistory()
277 glh->hash.bucket[i].lines = NULL; in _new_GlHistory()
278 glh->prefix = NULL; in _new_GlHistory()
279 glh->lbuf = NULL; in _new_GlHistory()
280 glh->lbuf_dim = 0; in _new_GlHistory()
281 glh->nbusy = 0; in _new_GlHistory()
282 glh->nfree = glh->nbuff; in _new_GlHistory()
283 glh->seq = 0; in _new_GlHistory()
284 glh->group = 0; in _new_GlHistory()
285 glh->nline = 0; in _new_GlHistory()
286 glh->max_lines = -1; in _new_GlHistory()
287 glh->enable = 1; in _new_GlHistory()
291 glh->err = _new_ErrMsg(); in _new_GlHistory()
292 if(!glh->err) in _new_GlHistory()
293 return _del_GlHistory(glh); in _new_GlHistory()
297 if(glh->nbuff > 0) { in _new_GlHistory()
298 glh->nbuff = glh->nfree; in _new_GlHistory()
299 glh->buffer = (GlhLineSeg *) malloc(sizeof(GlhLineSeg) * glh->nbuff); in _new_GlHistory()
300 if(!glh->buffer) { in _new_GlHistory()
302 return _del_GlHistory(glh); in _new_GlHistory()
308 glh->unused = glh->buffer; in _new_GlHistory()
309 for(i=0; i<glh->nbuff-1; i++) { in _new_GlHistory()
310 GlhLineSeg *seg = glh->unused + i; in _new_GlHistory()
313 glh->unused[i].next = NULL; in _new_GlHistory()
318 glh->list.node_mem = _new_FreeList(sizeof(GlhLineNode), GLH_LINE_INCR); in _new_GlHistory()
319 if(!glh->list.node_mem) in _new_GlHistory()
320 return _del_GlHistory(glh); in _new_GlHistory()
324 glh->hash.node_mem = _new_FreeList(sizeof(GlhLineNode), GLH_HASH_INCR); in _new_GlHistory()
325 if(!glh->hash.node_mem) in _new_GlHistory()
326 return _del_GlHistory(glh); in _new_GlHistory()
331 glh->lbuf_dim = GLH_LBUF_SIZE; in _new_GlHistory()
332 glh->lbuf = (char *) malloc(glh->lbuf_dim); in _new_GlHistory()
333 if(!glh->lbuf) { in _new_GlHistory()
335 return _del_GlHistory(glh); in _new_GlHistory()
337 return glh; in _new_GlHistory()
348 GlHistory *_del_GlHistory(GlHistory *glh) in _del_GlHistory() argument
350 if(glh) { in _del_GlHistory()
354 glh->err = _del_ErrMsg(glh->err); in _del_GlHistory()
358 if(glh->buffer) { in _del_GlHistory()
359 free(glh->buffer); in _del_GlHistory()
360 glh->buffer = NULL; in _del_GlHistory()
361 glh->unused = NULL; in _del_GlHistory()
366 glh->list.node_mem = _del_FreeList(glh->list.node_mem, 1); in _del_GlHistory()
370 glh->list.head = NULL; in _del_GlHistory()
371 glh->list.tail = NULL; in _del_GlHistory()
375 glh->hash.node_mem = _del_FreeList(glh->hash.node_mem, 1); in _del_GlHistory()
379 if(glh->lbuf) in _del_GlHistory()
380 free(glh->lbuf); in _del_GlHistory()
384 free(glh); in _del_GlHistory()
403 int _glh_add_history(GlHistory *glh, const char *line, int force) in _glh_add_history() argument
414 if(!glh || !line) { in _glh_add_history()
421 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_add_history()
426 if(_glh_cancel_search(glh)) in _glh_add_history()
453 if(glh->max_lines >= 0) { in _glh_add_history()
458 while(glh->nline > 0 && glh->nline >= glh->max_lines) in _glh_add_history()
459 _glh_discard_line(glh, glh->list.head); in _glh_add_history()
464 if(glh->max_lines == 0) in _glh_add_history()
471 hnode = _glh_acquire_copy(glh, line, slen); in _glh_add_history()
473 _err_record_msg(glh->err, "No room to store history line", END_ERR_MSG); in _glh_add_history()
480 lnode = (GlhLineNode *) _new_FreeListNode(glh->list.node_mem); in _glh_add_history()
486 hnode = _glh_discard_copy(glh, hnode); in _glh_add_history()
487 _err_record_msg(glh->err, "No room to store history line", END_ERR_MSG); in _glh_add_history()
495 lnode->id = glh->seq++; in _glh_add_history()
497 lnode->group = glh->group; in _glh_add_history()
502 if(glh->list.head) in _glh_add_history()
503 glh->list.tail->next = lnode; in _glh_add_history()
505 glh->list.head = lnode; in _glh_add_history()
507 lnode->prev = glh->list.tail; in _glh_add_history()
508 glh->list.tail = lnode; in _glh_add_history()
512 glh->nline++; in _glh_add_history()
530 char *_glh_find_backwards(GlHistory *glh, char *line, size_t dim) in _glh_find_backwards() argument
537 if(!glh || !line) { in _glh_find_backwards()
538 if(glh) in _glh_find_backwards()
539 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_find_backwards()
546 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_find_backwards()
552 _err_record_msg(glh->err, "'dim' argument inconsistent with strlen(line)", in _glh_find_backwards()
560 if(_glh_prepare_for_recall(glh, line)) in _glh_find_backwards()
565 if(glh->recall) { in _glh_find_backwards()
566 node = glh->recall->prev; in _glh_find_backwards()
567 old_line = glh->recall->line; in _glh_find_backwards()
569 node = glh->list.tail; in _glh_find_backwards()
576 while(node && (node->group != glh->group || node->line == old_line || in _glh_find_backwards()
577 !_glh_line_matches_prefix(node->line, glh->prefix))) in _glh_find_backwards()
587 glh->recall = node; in _glh_find_backwards()
618 char *_glh_find_forwards(GlHistory *glh, char *line, size_t dim) in _glh_find_forwards() argument
625 if(!glh || !line) { in _glh_find_forwards()
626 if(glh) in _glh_find_forwards()
627 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_find_forwards()
634 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_find_forwards()
640 _err_record_msg(glh->err, "'dim' argument inconsistent with strlen(line)", in _glh_find_forwards()
648 if(glh->recall) { in _glh_find_forwards()
649 node = glh->recall->next; in _glh_find_forwards()
650 old_line = glh->recall->line; in _glh_find_forwards()
658 while(node && (node->group != glh->group || node->line == old_line || in _glh_find_forwards()
659 !_glh_line_matches_prefix(node->line, glh->prefix))) in _glh_find_forwards()
672 glh->recall = node; in _glh_find_forwards()
677 if(node == glh->list.tail) in _glh_find_forwards()
678 _glh_cancel_search(glh); in _glh_find_forwards()
703 int _glh_cancel_search(GlHistory *glh) in _glh_cancel_search() argument
708 if(!glh) { in _glh_cancel_search()
715 if(!glh->recall) in _glh_cancel_search()
722 glh->recall = NULL; in _glh_cancel_search()
726 _glh_discard_line(glh, glh->list.tail); in _glh_cancel_search()
741 int _glh_search_prefix(GlHistory *glh, const char *line, int prefix_len) in _glh_search_prefix() argument
746 if(!glh) { in _glh_search_prefix()
753 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_search_prefix()
758 glh->prefix = _glh_discard_copy(glh, glh->prefix); in _glh_search_prefix()
766 glh->prefix = _glh_acquire_copy(glh, line, prefix_len); in _glh_search_prefix()
770 if(!glh->prefix) { in _glh_search_prefix()
771 _err_record_msg(glh->err, "The search prefix is too long to store", in _glh_search_prefix()
792 char *_glh_oldest_line(GlHistory *glh, char *line, size_t dim) in _glh_oldest_line() argument
798 if(!glh || !line) { in _glh_oldest_line()
799 if(glh) in _glh_oldest_line()
800 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_oldest_line()
807 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_oldest_line()
813 _err_record_msg(glh->err, "'dim' argument inconsistent with strlen(line)", in _glh_oldest_line()
821 if(_glh_prepare_for_recall(glh, line)) in _glh_oldest_line()
826 for(node=glh->list.head; node && node->group != glh->group; in _glh_oldest_line()
838 glh->recall = node; in _glh_oldest_line()
847 if(node == glh->list.tail) in _glh_oldest_line()
848 _glh_cancel_search(glh); in _glh_oldest_line()
865 char *_glh_current_line(GlHistory *glh, char *line, size_t dim) in _glh_current_line() argument
870 if(!glh || !line) { in _glh_current_line()
871 if(glh) in _glh_current_line()
872 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_current_line()
880 if(!glh->enable || !glh->buffer || glh->max_lines == 0 || !glh->recall) in _glh_current_line()
886 _err_record_msg(glh->err, "'dim' argument inconsistent with strlen(line)", in _glh_current_line()
894 _glh_return_line(glh->list.tail->line, line, dim); in _glh_current_line()
898 _glh_cancel_search(glh); in _glh_current_line()
917 GlhLineID _glh_line_id(GlHistory *glh, int offset) in _glh_line_id() argument
923 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_line_id()
929 for(node=glh->recall; node && offset != 0; node=node->next) { in _glh_line_id()
930 if(node->group == glh->group) in _glh_line_id()
934 for(node=glh->recall; node && offset != 0; node=node->prev) { in _glh_line_id()
935 if(node->group == glh->group) in _glh_line_id()
956 char *_glh_recall_line(GlHistory *glh, GlhLineID id, char *line, size_t dim) in _glh_recall_line() argument
962 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_recall_line()
967 if(_glh_prepare_for_recall(glh, line)) in _glh_recall_line()
972 node = _glh_find_id(glh, id); in _glh_recall_line()
976 if(!node || node->group != glh->group) in _glh_recall_line()
982 glh->recall = node; in _glh_recall_line()
1009 int _glh_save_history(GlHistory *glh, const char *filename, const char *comment, in _glh_save_history() argument
1013 _err_record_msg(glh->err, "Can't save history without filesystem access", in _glh_save_history()
1025 if(!glh || !filename || !comment) { in _glh_save_history()
1026 if(glh) in _glh_save_history()
1027 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_save_history()
1036 return _glh_cant_save_history(glh, "Can't open", filename, NULL); in _glh_save_history()
1043 for(head=glh->list.tail; head && --max_lines > 0; head=head->prev) in _glh_save_history()
1047 head = glh->list.head; in _glh_save_history()
1060 return _glh_cant_save_history(glh, "Error writing", filename, fp); in _glh_save_history()
1068 return _glh_cant_save_history(glh, "Error writing", filename, fp); in _glh_save_history()
1076 return _glh_cant_save_history(glh, "Error writing", filename, NULL); in _glh_save_history()
1097 static int _glh_cant_save_history(GlHistory *glh, const char *message, in _glh_cant_save_history() argument
1100 _err_record_msg(glh->err, message, filename, " (", in _glh_cant_save_history()
1155 int _glh_load_history(GlHistory *glh, const char *filename, const char *comment, in _glh_load_history() argument
1159 _err_record_msg(glh->err, "Can't load history without filesystem access", in _glh_load_history()
1173 if(!glh || !filename || !comment || !line) { in _glh_load_history()
1174 if(glh) in _glh_load_history()
1175 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_load_history()
1186 _glh_clear_history(glh, 1); in _glh_load_history()
1204 return _glh_cant_load_history(glh, filename, lineno, in _glh_load_history()
1216 return _glh_cant_load_history(glh, filename, lineno, in _glh_load_history()
1229 return _glh_cant_load_history(glh, filename, lineno, in _glh_load_history()
1241 return _glh_cant_load_history(glh, filename, lineno, in _glh_load_history()
1249 return _glh_cant_load_history(glh, filename, lineno, "Read error", fp); in _glh_load_history()
1253 if(_glh_add_history(glh, line, 1)) { in _glh_load_history()
1254 return _glh_cant_load_history(glh, filename, lineno, in _glh_load_history()
1260 if(glh->list.tail) { in _glh_load_history()
1261 glh->list.tail->timestamp = timestamp; in _glh_load_history()
1262 glh->list.tail->group = group; in _glh_load_history()
1277 static int _glh_cant_load_history(GlHistory *glh, const char *filename, in _glh_cant_load_history() argument
1288 _err_record_msg(glh->err, filename, ":", lnum, ":", message, END_ERR_MSG); in _glh_cant_load_history()
1389 int _glh_set_group(GlHistory *glh, unsigned group) in _glh_set_group() argument
1394 if(!glh) { in _glh_set_group()
1395 if(glh) in _glh_set_group()
1396 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_set_group()
1403 if(group != glh->group) { in _glh_set_group()
1407 if(_glh_cancel_search(glh)) in _glh_set_group()
1412 glh->group = group; in _glh_set_group()
1425 int _glh_get_group(GlHistory *glh) in _glh_get_group() argument
1427 return glh ? glh->group : 0; in _glh_get_group()
1458 int _glh_show_history(GlHistory *glh, GlWriteFn *write_fn, void *data, in _glh_show_history() argument
1473 if(!glh || !write_fn || !fmt) { in _glh_show_history()
1474 if(glh) in _glh_show_history()
1475 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_show_history()
1482 if(!glh->enable || !glh->list.head) in _glh_show_history()
1489 snprintf(buffer, sizeof(buffer), "%lu", (unsigned long) glh->list.tail->id); in _glh_show_history()
1495 for(node=glh->list.head; node; node=node->next) { in _glh_show_history()
1508 oldest = glh->list.head; in _glh_show_history()
1512 for(oldest=glh->list.tail; oldest; oldest=oldest->prev) { in _glh_show_history()
1513 if((all_groups || oldest->group == glh->group) && --max_lines <= 0) in _glh_show_history()
1521 oldest = glh->list.head; in _glh_show_history()
1531 if(all_groups || node->group == glh->group) { in _glh_show_history()
1629 int _glh_resize_history(GlHistory *glh, size_t bufsize) in _glh_resize_history() argument
1636 if(!glh) { in _glh_resize_history()
1648 if(glh->nbuff != nbuff) { in _glh_resize_history()
1652 (void) _glh_cancel_search(glh); in _glh_resize_history()
1656 if(glh->nbuff == 0 && nbuff>0) { in _glh_resize_history()
1657 glh->buffer = (GlhLineSeg *) malloc(sizeof(GlhLineSeg) * nbuff); in _glh_resize_history()
1658 if(!glh->buffer) in _glh_resize_history()
1660 glh->nbuff = nbuff; in _glh_resize_history()
1661 glh->nfree = glh->nbuff; in _glh_resize_history()
1662 glh->nbusy = 0; in _glh_resize_history()
1663 glh->nline = 0; in _glh_resize_history()
1667 glh->unused = glh->buffer; in _glh_resize_history()
1668 for(i=0; i<glh->nbuff-1; i++) { in _glh_resize_history()
1669 GlhLineSeg *seg = glh->unused + i; in _glh_resize_history()
1672 glh->unused[i].next = NULL; in _glh_resize_history()
1677 _glh_clear_history(glh, 1); in _glh_resize_history()
1678 free(glh->buffer); in _glh_resize_history()
1679 glh->buffer = NULL; in _glh_resize_history()
1680 glh->unused = NULL; in _glh_resize_history()
1681 glh->nbuff = 0; in _glh_resize_history()
1682 glh->nfree = 0; in _glh_resize_history()
1683 glh->nbusy = 0; in _glh_resize_history()
1684 glh->nline = 0; in _glh_resize_history()
1695 while(glh->list.head && glh->nbusy > nbuff) in _glh_resize_history()
1696 _glh_discard_line(glh, glh->list.head); in _glh_resize_history()
1710 GlhHashBucket *b = glh->hash.bucket + i; in _glh_resize_history()
1732 free(glh->buffer); in _glh_resize_history()
1736 glh->buffer = buffer; in _glh_resize_history()
1737 glh->nbuff = nbuff; in _glh_resize_history()
1738 glh->nbusy = nbusy; in _glh_resize_history()
1739 glh->nfree = nbuff - nbusy; in _glh_resize_history()
1740 glh->unused = glh->nfree > 0 ? (buffer + nbusy) : NULL; in _glh_resize_history()
1756 void _glh_limit_history(GlHistory *glh, int max_lines) in _glh_limit_history() argument
1758 if(!glh) in _glh_limit_history()
1763 if(max_lines >= 0 && max_lines != glh->max_lines) { in _glh_limit_history()
1771 for(node=glh->list.tail; node && ++nline <= max_lines; node=node->prev) in _glh_limit_history()
1782 while(glh->list.head && glh->list.head != oldest) in _glh_limit_history()
1783 _glh_discard_line(glh, glh->list.head); in _glh_limit_history()
1789 glh->max_lines = max_lines; in _glh_limit_history()
1803 void _glh_clear_history(GlHistory *glh, int all_groups) in _glh_clear_history() argument
1809 if(!glh) in _glh_clear_history()
1814 (void) _glh_cancel_search(glh); in _glh_clear_history()
1822 _rst_FreeList(glh->list.node_mem); in _glh_clear_history()
1823 glh->list.head = glh->list.tail = NULL; in _glh_clear_history()
1824 glh->nline = 0; in _glh_clear_history()
1825 glh->id_node = NULL; in _glh_clear_history()
1830 glh->hash.bucket[i].lines = NULL; in _glh_clear_history()
1831 _rst_FreeList(glh->hash.node_mem); in _glh_clear_history()
1835 if(glh->buffer) { in _glh_clear_history()
1836 glh->unused = glh->buffer; in _glh_clear_history()
1837 for(i=0; i<glh->nbuff-1; i++) { in _glh_clear_history()
1838 GlhLineSeg *seg = glh->unused + i; in _glh_clear_history()
1841 glh->unused[i].next = NULL; in _glh_clear_history()
1842 glh->nfree = glh->nbuff; in _glh_clear_history()
1843 glh->nbusy = 0; in _glh_clear_history()
1845 glh->unused = NULL; in _glh_clear_history()
1846 glh->nbusy = glh->nfree = 0; in _glh_clear_history()
1857 for(node=glh->list.head; node; node=next) { in _glh_clear_history()
1866 if(node->group == glh->group) in _glh_clear_history()
1867 _glh_discard_line(glh, node); in _glh_clear_history()
1881 void _glh_toggle_history(GlHistory *glh, int enable) in _glh_toggle_history() argument
1883 if(glh) in _glh_toggle_history()
1884 glh->enable = enable; in _glh_toggle_history()
1896 static void _glh_discard_line(GlHistory *glh, GlhLineNode *node) in _glh_discard_line() argument
1904 glh->list.head = node->next; in _glh_discard_line()
1908 glh->list.tail = node->prev; in _glh_discard_line()
1913 if(node == glh->id_node) in _glh_discard_line()
1914 glh->id_node = NULL; in _glh_discard_line()
1919 if(node == glh->recall) in _glh_discard_line()
1920 _glh_cancel_search(glh); in _glh_discard_line()
1924 node->line = _glh_discard_copy(glh, node->line); in _glh_discard_line()
1928 (void) _del_FreeListNode(glh->list.node_mem, node); in _glh_discard_line()
1932 glh->nline--; in _glh_discard_line()
1955 int _glh_lookup_history(GlHistory *glh, GlhLineID id, const char **line, in _glh_lookup_history() argument
1962 if(!glh) in _glh_lookup_history()
1967 node = _glh_find_id(glh, id); in _glh_lookup_history()
1981 if(node->line->len + 1 > glh->lbuf_dim) { in _glh_lookup_history()
1983 char *lbuf = realloc(glh->lbuf, lbuf_dim); in _glh_lookup_history()
1988 glh->lbuf_dim = lbuf_dim; in _glh_lookup_history()
1989 glh->lbuf = lbuf; in _glh_lookup_history()
1994 _glh_return_line(node->line, glh->lbuf, glh->lbuf_dim); in _glh_lookup_history()
1998 *line = glh->lbuf; in _glh_lookup_history()
2022 static GlhLineNode *_glh_find_id(GlHistory *glh, GlhLineID id) in _glh_find_id() argument
2028 if(!glh->enable || !glh->list.head) in _glh_find_id()
2034 node = glh->id_node; in _glh_find_id()
2036 node = glh->list.head; in _glh_find_id()
2043 glh->id_node = node ? node : glh->list.tail; in _glh_find_id()
2050 glh->id_node = node ? node : glh->list.head; in _glh_find_id()
2073 void _glh_state_of_history(GlHistory *glh, int *enabled, unsigned *group, in _glh_state_of_history() argument
2076 if(glh) { in _glh_state_of_history()
2078 *enabled = glh->enable; in _glh_state_of_history()
2080 *group = glh->group; in _glh_state_of_history()
2082 *max_lines = glh->max_lines; in _glh_state_of_history()
2103 void _glh_range_of_history(GlHistory *glh, unsigned long *oldest, in _glh_range_of_history() argument
2106 if(glh) { in _glh_range_of_history()
2108 *oldest = glh->list.head ? glh->list.head->id : 0; in _glh_range_of_history()
2110 *newest = glh->list.tail ? glh->list.tail->id : 0; in _glh_range_of_history()
2112 *nlines = glh->nline; in _glh_range_of_history()
2127 void _glh_size_of_history(GlHistory *glh, size_t *buff_size, size_t *buff_used) in _glh_size_of_history() argument
2129 if(glh) { in _glh_size_of_history()
2131 *buff_size = (glh->nbusy + glh->nfree) * GLH_SEG_SIZE; in _glh_size_of_history()
2136 *buff_used = glh->nbusy * GLH_SEG_SIZE; in _glh_size_of_history()
2151 const char *_glh_last_error(GlHistory *glh) in _glh_last_error() argument
2153 return glh ? _err_get_msg(glh->err) : "NULL GlHistory argument"; in _glh_last_error()
2169 static GlhHashNode *_glh_acquire_copy(GlHistory *glh, const char *line, in _glh_acquire_copy() argument
2178 bucket = glh_find_bucket(glh, line, n); in _glh_acquire_copy()
2199 while(glh->nfree < nseg && glh->nbusy > 0) in _glh_acquire_copy()
2200 _glh_discard_line(glh, glh->list.head); in _glh_acquire_copy()
2205 if(glh->nfree < nseg) in _glh_acquire_copy()
2211 for(i=0,seg=glh->unused; i<nseg-1; i++,seg=seg->next, offset+=GLH_SEG_SIZE) in _glh_acquire_copy()
2218 hnode = (GlhHashNode *) _new_FreeListNode(glh->hash.node_mem); in _glh_acquire_copy()
2225 hnode->head = glh->unused; in _glh_acquire_copy()
2226 glh->unused = seg->next; in _glh_acquire_copy()
2228 glh->nbusy += nseg; in _glh_acquire_copy()
2229 glh->nfree -= nseg; in _glh_acquire_copy()
2261 static GlhHashNode *_glh_discard_copy(GlHistory *glh, GlhHashNode *hnode) in _glh_discard_copy() argument
2302 tail->next = glh->unused; in _glh_discard_copy()
2303 glh->unused = hnode->head; in _glh_discard_copy()
2304 glh->nbusy -= nseg; in _glh_discard_copy()
2305 glh->nfree += nseg; in _glh_discard_copy()
2310 hnode = (GlhHashNode *) _del_FreeListNode(glh->hash.node_mem, hnode); in _glh_discard_copy()
2331 static GlhHashBucket *glh_find_bucket(GlHistory *glh, const char *line, in glh_find_bucket() argument
2340 return glh->hash.bucket + (h % GLH_HASH_SIZE); in glh_find_bucket()
2497 static int _glh_prepare_for_recall(GlHistory *glh, char *line) in _glh_prepare_for_recall() argument
2506 if(glh->recall && glh->recall == glh->list.tail && in _glh_prepare_for_recall()
2507 !_glh_is_line(glh->recall->line, line, strlen(line))) { in _glh_prepare_for_recall()
2508 _glh_cancel_search(glh); in _glh_prepare_for_recall()
2515 if(!glh->recall) { in _glh_prepare_for_recall()
2516 if(_glh_add_history(glh, line, 1)) in _glh_prepare_for_recall()
2518 glh->recall = glh->list.tail; in _glh_prepare_for_recall()
2524 glh->seq--; in _glh_prepare_for_recall()
2538 int _glh_search_active(GlHistory *glh) in _glh_search_active() argument
2540 return glh && glh->recall; in _glh_search_active()