Lines Matching refs:glh
116 static GlhHashBucket *glh_find_bucket(GlHistory *glh, const char *line,
199 static int _glh_cant_load_history(GlHistory *glh, const char *filename,
201 static int _glh_cant_save_history(GlHistory *glh, const char *message,
206 static void _glh_discard_line(GlHistory *glh, GlhLineNode *node);
207 static GlhLineNode *_glh_find_id(GlHistory *glh, GlhLineID id);
208 static GlhHashNode *_glh_acquire_copy(GlHistory *glh, const char *line,
210 static GlhHashNode *_glh_discard_copy(GlHistory *glh, GlhHashNode *hnode);
211 static int _glh_prepare_for_recall(GlHistory *glh, char *line);
250 GlHistory *glh; /* The object to be returned */ in _new_GlHistory() local
255 glh = (GlHistory *) malloc(sizeof(GlHistory)); in _new_GlHistory()
256 if(!glh) { in _new_GlHistory()
265 glh->err = NULL; in _new_GlHistory()
266 glh->buffer = NULL; in _new_GlHistory()
267 glh->nbuff = (buflen+GLH_SEG_SIZE-1) / GLH_SEG_SIZE; in _new_GlHistory()
268 glh->unused = NULL; in _new_GlHistory()
269 glh->list.node_mem = NULL; in _new_GlHistory()
270 glh->list.head = glh->list.tail = NULL; in _new_GlHistory()
271 glh->recall = NULL; in _new_GlHistory()
272 glh->id_node = NULL; in _new_GlHistory()
273 glh->hash.node_mem = NULL; in _new_GlHistory()
275 glh->hash.bucket[i].lines = NULL; in _new_GlHistory()
276 glh->prefix = NULL; in _new_GlHistory()
277 glh->lbuf = NULL; in _new_GlHistory()
278 glh->lbuf_dim = 0; in _new_GlHistory()
279 glh->nbusy = 0; in _new_GlHistory()
280 glh->nfree = glh->nbuff; in _new_GlHistory()
281 glh->seq = 0; in _new_GlHistory()
282 glh->group = 0; in _new_GlHistory()
283 glh->nline = 0; in _new_GlHistory()
284 glh->max_lines = -1; in _new_GlHistory()
285 glh->enable = 1; in _new_GlHistory()
289 glh->err = _new_ErrMsg(); in _new_GlHistory()
290 if(!glh->err) in _new_GlHistory()
291 return _del_GlHistory(glh); in _new_GlHistory()
295 if(glh->nbuff > 0) { in _new_GlHistory()
296 glh->nbuff = glh->nfree; in _new_GlHistory()
297 glh->buffer = (GlhLineSeg *) malloc(sizeof(GlhLineSeg) * glh->nbuff); in _new_GlHistory()
298 if(!glh->buffer) { in _new_GlHistory()
300 return _del_GlHistory(glh); in _new_GlHistory()
306 glh->unused = glh->buffer; in _new_GlHistory()
307 for(i=0; i<glh->nbuff-1; i++) { in _new_GlHistory()
308 GlhLineSeg *seg = glh->unused + i; in _new_GlHistory()
311 glh->unused[i].next = NULL; in _new_GlHistory()
316 glh->list.node_mem = _new_FreeList(sizeof(GlhLineNode), GLH_LINE_INCR); in _new_GlHistory()
317 if(!glh->list.node_mem) in _new_GlHistory()
318 return _del_GlHistory(glh); in _new_GlHistory()
322 glh->hash.node_mem = _new_FreeList(sizeof(GlhLineNode), GLH_HASH_INCR); in _new_GlHistory()
323 if(!glh->hash.node_mem) in _new_GlHistory()
324 return _del_GlHistory(glh); in _new_GlHistory()
329 glh->lbuf_dim = GLH_LBUF_SIZE; in _new_GlHistory()
330 glh->lbuf = (char *) malloc(glh->lbuf_dim); in _new_GlHistory()
331 if(!glh->lbuf) { in _new_GlHistory()
333 return _del_GlHistory(glh); in _new_GlHistory()
335 return glh; in _new_GlHistory()
346 GlHistory *_del_GlHistory(GlHistory *glh) in _del_GlHistory() argument
348 if(glh) { in _del_GlHistory()
352 glh->err = _del_ErrMsg(glh->err); in _del_GlHistory()
356 if(glh->buffer) { in _del_GlHistory()
357 free(glh->buffer); in _del_GlHistory()
358 glh->buffer = NULL; in _del_GlHistory()
359 glh->unused = NULL; in _del_GlHistory()
364 glh->list.node_mem = _del_FreeList(glh->list.node_mem, 1); in _del_GlHistory()
368 glh->list.head = NULL; in _del_GlHistory()
369 glh->list.tail = NULL; in _del_GlHistory()
373 glh->hash.node_mem = _del_FreeList(glh->hash.node_mem, 1); in _del_GlHistory()
377 if(glh->lbuf) in _del_GlHistory()
378 free(glh->lbuf); in _del_GlHistory()
382 free(glh); in _del_GlHistory()
401 int _glh_add_history(GlHistory *glh, const char *line, int force) in _glh_add_history() argument
412 if(!glh || !line) { in _glh_add_history()
419 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_add_history()
424 if(_glh_cancel_search(glh)) in _glh_add_history()
451 if(glh->max_lines >= 0) { in _glh_add_history()
456 while(glh->nline > 0 && glh->nline >= glh->max_lines) in _glh_add_history()
457 _glh_discard_line(glh, glh->list.head); in _glh_add_history()
462 if(glh->max_lines == 0) in _glh_add_history()
469 hnode = _glh_acquire_copy(glh, line, slen); in _glh_add_history()
471 _err_record_msg(glh->err, "No room to store history line", END_ERR_MSG); in _glh_add_history()
478 lnode = (GlhLineNode *) _new_FreeListNode(glh->list.node_mem); in _glh_add_history()
484 hnode = _glh_discard_copy(glh, hnode); in _glh_add_history()
485 _err_record_msg(glh->err, "No room to store history line", END_ERR_MSG); in _glh_add_history()
493 lnode->id = glh->seq++; in _glh_add_history()
495 lnode->group = glh->group; in _glh_add_history()
500 if(glh->list.head) in _glh_add_history()
501 glh->list.tail->next = lnode; in _glh_add_history()
503 glh->list.head = lnode; in _glh_add_history()
505 lnode->prev = glh->list.tail; in _glh_add_history()
506 glh->list.tail = lnode; in _glh_add_history()
510 glh->nline++; in _glh_add_history()
528 char *_glh_find_backwards(GlHistory *glh, char *line, size_t dim) in _glh_find_backwards() argument
535 if(!glh || !line) { in _glh_find_backwards()
536 if(glh) in _glh_find_backwards()
537 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_find_backwards()
544 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_find_backwards()
550 _err_record_msg(glh->err, "'dim' argument inconsistent with strlen(line)", in _glh_find_backwards()
558 if(_glh_prepare_for_recall(glh, line)) in _glh_find_backwards()
563 if(glh->recall) { in _glh_find_backwards()
564 node = glh->recall->prev; in _glh_find_backwards()
565 old_line = glh->recall->line; in _glh_find_backwards()
567 node = glh->list.tail; in _glh_find_backwards()
574 while(node && (node->group != glh->group || node->line == old_line || in _glh_find_backwards()
575 !_glh_line_matches_prefix(node->line, glh->prefix))) in _glh_find_backwards()
585 glh->recall = node; in _glh_find_backwards()
616 char *_glh_find_forwards(GlHistory *glh, char *line, size_t dim) in _glh_find_forwards() argument
623 if(!glh || !line) { in _glh_find_forwards()
624 if(glh) in _glh_find_forwards()
625 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_find_forwards()
632 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_find_forwards()
638 _err_record_msg(glh->err, "'dim' argument inconsistent with strlen(line)", in _glh_find_forwards()
646 if(glh->recall) { in _glh_find_forwards()
647 node = glh->recall->next; in _glh_find_forwards()
648 old_line = glh->recall->line; in _glh_find_forwards()
656 while(node && (node->group != glh->group || node->line == old_line || in _glh_find_forwards()
657 !_glh_line_matches_prefix(node->line, glh->prefix))) in _glh_find_forwards()
670 glh->recall = node; in _glh_find_forwards()
675 if(node == glh->list.tail) in _glh_find_forwards()
676 _glh_cancel_search(glh); in _glh_find_forwards()
701 int _glh_cancel_search(GlHistory *glh) in _glh_cancel_search() argument
706 if(!glh) { in _glh_cancel_search()
713 if(!glh->recall) in _glh_cancel_search()
720 glh->recall = NULL; in _glh_cancel_search()
724 _glh_discard_line(glh, glh->list.tail); in _glh_cancel_search()
739 int _glh_search_prefix(GlHistory *glh, const char *line, int prefix_len) in _glh_search_prefix() argument
744 if(!glh) { in _glh_search_prefix()
751 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_search_prefix()
756 glh->prefix = _glh_discard_copy(glh, glh->prefix); in _glh_search_prefix()
764 glh->prefix = _glh_acquire_copy(glh, line, prefix_len); in _glh_search_prefix()
768 if(!glh->prefix) { in _glh_search_prefix()
769 _err_record_msg(glh->err, "The search prefix is too long to store", in _glh_search_prefix()
790 char *_glh_oldest_line(GlHistory *glh, char *line, size_t dim) in _glh_oldest_line() argument
796 if(!glh || !line) { in _glh_oldest_line()
797 if(glh) in _glh_oldest_line()
798 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_oldest_line()
805 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_oldest_line()
811 _err_record_msg(glh->err, "'dim' argument inconsistent with strlen(line)", in _glh_oldest_line()
819 if(_glh_prepare_for_recall(glh, line)) in _glh_oldest_line()
824 for(node=glh->list.head; node && node->group != glh->group; in _glh_oldest_line()
836 glh->recall = node; in _glh_oldest_line()
845 if(node == glh->list.tail) in _glh_oldest_line()
846 _glh_cancel_search(glh); in _glh_oldest_line()
863 char *_glh_current_line(GlHistory *glh, char *line, size_t dim) in _glh_current_line() argument
868 if(!glh || !line) { in _glh_current_line()
869 if(glh) in _glh_current_line()
870 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_current_line()
878 if(!glh->enable || !glh->buffer || glh->max_lines == 0 || !glh->recall) in _glh_current_line()
884 _err_record_msg(glh->err, "'dim' argument inconsistent with strlen(line)", in _glh_current_line()
892 _glh_return_line(glh->list.tail->line, line, dim); in _glh_current_line()
896 _glh_cancel_search(glh); in _glh_current_line()
915 GlhLineID _glh_line_id(GlHistory *glh, int offset) in _glh_line_id() argument
921 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_line_id()
927 for(node=glh->recall; node && offset != 0; node=node->next) { in _glh_line_id()
928 if(node->group == glh->group) in _glh_line_id()
932 for(node=glh->recall; node && offset != 0; node=node->prev) { in _glh_line_id()
933 if(node->group == glh->group) in _glh_line_id()
954 char *_glh_recall_line(GlHistory *glh, GlhLineID id, char *line, size_t dim) in _glh_recall_line() argument
960 if(!glh->enable || !glh->buffer || glh->max_lines == 0) in _glh_recall_line()
965 if(_glh_prepare_for_recall(glh, line)) in _glh_recall_line()
970 node = _glh_find_id(glh, id); in _glh_recall_line()
974 if(!node || node->group != glh->group) in _glh_recall_line()
980 glh->recall = node; in _glh_recall_line()
1007 int _glh_save_history(GlHistory *glh, const char *filename, const char *comment, in _glh_save_history() argument
1011 _err_record_msg(glh->err, "Can't save history without filesystem access", in _glh_save_history()
1023 if(!glh || !filename || !comment) { in _glh_save_history()
1024 if(glh) in _glh_save_history()
1025 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_save_history()
1034 return _glh_cant_save_history(glh, "Can't open", filename, NULL); in _glh_save_history()
1041 for(head=glh->list.tail; head && --max_lines > 0; head=head->prev) in _glh_save_history()
1045 head = glh->list.head; in _glh_save_history()
1058 return _glh_cant_save_history(glh, "Error writing", filename, fp); in _glh_save_history()
1066 return _glh_cant_save_history(glh, "Error writing", filename, fp); in _glh_save_history()
1074 return _glh_cant_save_history(glh, "Error writing", filename, NULL); in _glh_save_history()
1095 static int _glh_cant_save_history(GlHistory *glh, const char *message, in _glh_cant_save_history() argument
1098 _err_record_msg(glh->err, message, filename, " (", in _glh_cant_save_history()
1153 int _glh_load_history(GlHistory *glh, const char *filename, const char *comment, in _glh_load_history() argument
1157 _err_record_msg(glh->err, "Can't load history without filesystem access", in _glh_load_history()
1171 if(!glh || !filename || !comment || !line) { in _glh_load_history()
1172 if(glh) in _glh_load_history()
1173 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_load_history()
1184 _glh_clear_history(glh, 1); in _glh_load_history()
1202 return _glh_cant_load_history(glh, filename, lineno, in _glh_load_history()
1214 return _glh_cant_load_history(glh, filename, lineno, in _glh_load_history()
1227 return _glh_cant_load_history(glh, filename, lineno, in _glh_load_history()
1239 return _glh_cant_load_history(glh, filename, lineno, in _glh_load_history()
1247 return _glh_cant_load_history(glh, filename, lineno, "Read error", fp); in _glh_load_history()
1251 if(_glh_add_history(glh, line, 1)) { in _glh_load_history()
1252 return _glh_cant_load_history(glh, filename, lineno, in _glh_load_history()
1258 if(glh->list.tail) { in _glh_load_history()
1259 glh->list.tail->timestamp = timestamp; in _glh_load_history()
1260 glh->list.tail->group = group; in _glh_load_history()
1275 static int _glh_cant_load_history(GlHistory *glh, const char *filename, in _glh_cant_load_history() argument
1286 _err_record_msg(glh->err, filename, ":", lnum, ":", message, END_ERR_MSG); in _glh_cant_load_history()
1387 int _glh_set_group(GlHistory *glh, unsigned group) in _glh_set_group() argument
1392 if(!glh) { in _glh_set_group()
1393 if(glh) in _glh_set_group()
1394 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_set_group()
1401 if(group != glh->group) { in _glh_set_group()
1405 if(_glh_cancel_search(glh)) in _glh_set_group()
1410 glh->group = group; in _glh_set_group()
1423 int _glh_get_group(GlHistory *glh) in _glh_get_group() argument
1425 return glh ? glh->group : 0; in _glh_get_group()
1456 int _glh_show_history(GlHistory *glh, GlWriteFn *write_fn, void *data, in _glh_show_history() argument
1471 if(!glh || !write_fn || !fmt) { in _glh_show_history()
1472 if(glh) in _glh_show_history()
1473 _err_record_msg(glh->err, "NULL argument(s)", END_ERR_MSG); in _glh_show_history()
1480 if(!glh->enable || !glh->list.head) in _glh_show_history()
1487 snprintf(buffer, sizeof(buffer), "%lu", (unsigned long) glh->list.tail->id); in _glh_show_history()
1493 for(node=glh->list.head; node; node=node->next) { in _glh_show_history()
1506 oldest = glh->list.head; in _glh_show_history()
1510 for(oldest=glh->list.tail; oldest; oldest=oldest->prev) { in _glh_show_history()
1511 if((all_groups || oldest->group == glh->group) && --max_lines <= 0) in _glh_show_history()
1519 oldest = glh->list.head; in _glh_show_history()
1529 if(all_groups || node->group == glh->group) { in _glh_show_history()
1627 int _glh_resize_history(GlHistory *glh, size_t bufsize) in _glh_resize_history() argument
1634 if(!glh) { in _glh_resize_history()
1646 if(glh->nbuff != nbuff) { in _glh_resize_history()
1650 (void) _glh_cancel_search(glh); in _glh_resize_history()
1654 if(glh->nbuff == 0 && nbuff>0) { in _glh_resize_history()
1655 glh->buffer = (GlhLineSeg *) malloc(sizeof(GlhLineSeg) * nbuff); in _glh_resize_history()
1656 if(!glh->buffer) in _glh_resize_history()
1658 glh->nbuff = nbuff; in _glh_resize_history()
1659 glh->nfree = glh->nbuff; in _glh_resize_history()
1660 glh->nbusy = 0; in _glh_resize_history()
1661 glh->nline = 0; in _glh_resize_history()
1665 glh->unused = glh->buffer; in _glh_resize_history()
1666 for(i=0; i<glh->nbuff-1; i++) { in _glh_resize_history()
1667 GlhLineSeg *seg = glh->unused + i; in _glh_resize_history()
1670 glh->unused[i].next = NULL; in _glh_resize_history()
1675 _glh_clear_history(glh, 1); in _glh_resize_history()
1676 free(glh->buffer); in _glh_resize_history()
1677 glh->buffer = NULL; in _glh_resize_history()
1678 glh->unused = NULL; in _glh_resize_history()
1679 glh->nbuff = 0; in _glh_resize_history()
1680 glh->nfree = 0; in _glh_resize_history()
1681 glh->nbusy = 0; in _glh_resize_history()
1682 glh->nline = 0; in _glh_resize_history()
1693 while(glh->list.head && glh->nbusy > nbuff) in _glh_resize_history()
1694 _glh_discard_line(glh, glh->list.head); in _glh_resize_history()
1708 GlhHashBucket *b = glh->hash.bucket + i; in _glh_resize_history()
1730 free(glh->buffer); in _glh_resize_history()
1734 glh->buffer = buffer; in _glh_resize_history()
1735 glh->nbuff = nbuff; in _glh_resize_history()
1736 glh->nbusy = nbusy; in _glh_resize_history()
1737 glh->nfree = nbuff - nbusy; in _glh_resize_history()
1738 glh->unused = glh->nfree > 0 ? (buffer + nbusy) : NULL; in _glh_resize_history()
1754 void _glh_limit_history(GlHistory *glh, int max_lines) in _glh_limit_history() argument
1756 if(!glh) in _glh_limit_history()
1761 if(max_lines >= 0 && max_lines != glh->max_lines) { in _glh_limit_history()
1769 for(node=glh->list.tail; node && ++nline <= max_lines; node=node->prev) in _glh_limit_history()
1780 while(glh->list.head && glh->list.head != oldest) in _glh_limit_history()
1781 _glh_discard_line(glh, glh->list.head); in _glh_limit_history()
1787 glh->max_lines = max_lines; in _glh_limit_history()
1801 void _glh_clear_history(GlHistory *glh, int all_groups) in _glh_clear_history() argument
1807 if(!glh) in _glh_clear_history()
1812 (void) _glh_cancel_search(glh); in _glh_clear_history()
1820 _rst_FreeList(glh->list.node_mem); in _glh_clear_history()
1821 glh->list.head = glh->list.tail = NULL; in _glh_clear_history()
1822 glh->nline = 0; in _glh_clear_history()
1823 glh->id_node = NULL; in _glh_clear_history()
1828 glh->hash.bucket[i].lines = NULL; in _glh_clear_history()
1829 _rst_FreeList(glh->hash.node_mem); in _glh_clear_history()
1833 if(glh->buffer) { in _glh_clear_history()
1834 glh->unused = glh->buffer; in _glh_clear_history()
1835 for(i=0; i<glh->nbuff-1; i++) { in _glh_clear_history()
1836 GlhLineSeg *seg = glh->unused + i; in _glh_clear_history()
1839 glh->unused[i].next = NULL; in _glh_clear_history()
1840 glh->nfree = glh->nbuff; in _glh_clear_history()
1841 glh->nbusy = 0; in _glh_clear_history()
1843 glh->unused = NULL; in _glh_clear_history()
1844 glh->nbusy = glh->nfree = 0; in _glh_clear_history()
1855 for(node=glh->list.head; node; node=next) { in _glh_clear_history()
1864 if(node->group == glh->group) in _glh_clear_history()
1865 _glh_discard_line(glh, node); in _glh_clear_history()
1879 void _glh_toggle_history(GlHistory *glh, int enable) in _glh_toggle_history() argument
1881 if(glh) in _glh_toggle_history()
1882 glh->enable = enable; in _glh_toggle_history()
1894 static void _glh_discard_line(GlHistory *glh, GlhLineNode *node) in _glh_discard_line() argument
1902 glh->list.head = node->next; in _glh_discard_line()
1906 glh->list.tail = node->prev; in _glh_discard_line()
1911 if(node == glh->id_node) in _glh_discard_line()
1912 glh->id_node = NULL; in _glh_discard_line()
1917 if(node == glh->recall) in _glh_discard_line()
1918 _glh_cancel_search(glh); in _glh_discard_line()
1922 node->line = _glh_discard_copy(glh, node->line); in _glh_discard_line()
1926 (void) _del_FreeListNode(glh->list.node_mem, node); in _glh_discard_line()
1930 glh->nline--; in _glh_discard_line()
1953 int _glh_lookup_history(GlHistory *glh, GlhLineID id, const char **line, in _glh_lookup_history() argument
1960 if(!glh) in _glh_lookup_history()
1965 node = _glh_find_id(glh, id); in _glh_lookup_history()
1979 if(node->line->len + 1 > glh->lbuf_dim) { in _glh_lookup_history()
1981 char *lbuf = realloc(glh->lbuf, lbuf_dim); in _glh_lookup_history()
1986 glh->lbuf_dim = lbuf_dim; in _glh_lookup_history()
1987 glh->lbuf = lbuf; in _glh_lookup_history()
1992 _glh_return_line(node->line, glh->lbuf, glh->lbuf_dim); in _glh_lookup_history()
1996 *line = glh->lbuf; in _glh_lookup_history()
2020 static GlhLineNode *_glh_find_id(GlHistory *glh, GlhLineID id) in _glh_find_id() argument
2026 if(!glh->enable || !glh->list.head) in _glh_find_id()
2032 node = glh->id_node; in _glh_find_id()
2034 node = glh->list.head; in _glh_find_id()
2041 glh->id_node = node ? node : glh->list.tail; in _glh_find_id()
2048 glh->id_node = node ? node : glh->list.head; in _glh_find_id()
2071 void _glh_state_of_history(GlHistory *glh, int *enabled, unsigned *group, in _glh_state_of_history() argument
2074 if(glh) { in _glh_state_of_history()
2076 *enabled = glh->enable; in _glh_state_of_history()
2078 *group = glh->group; in _glh_state_of_history()
2080 *max_lines = glh->max_lines; in _glh_state_of_history()
2101 void _glh_range_of_history(GlHistory *glh, unsigned long *oldest, in _glh_range_of_history() argument
2104 if(glh) { in _glh_range_of_history()
2106 *oldest = glh->list.head ? glh->list.head->id : 0; in _glh_range_of_history()
2108 *newest = glh->list.tail ? glh->list.tail->id : 0; in _glh_range_of_history()
2110 *nlines = glh->nline; in _glh_range_of_history()
2125 void _glh_size_of_history(GlHistory *glh, size_t *buff_size, size_t *buff_used) in _glh_size_of_history() argument
2127 if(glh) { in _glh_size_of_history()
2129 *buff_size = (glh->nbusy + glh->nfree) * GLH_SEG_SIZE; in _glh_size_of_history()
2134 *buff_used = glh->nbusy * GLH_SEG_SIZE; in _glh_size_of_history()
2149 const char *_glh_last_error(GlHistory *glh) in _glh_last_error() argument
2151 return glh ? _err_get_msg(glh->err) : "NULL GlHistory argument"; in _glh_last_error()
2167 static GlhHashNode *_glh_acquire_copy(GlHistory *glh, const char *line, in _glh_acquire_copy() argument
2176 bucket = glh_find_bucket(glh, line, n); in _glh_acquire_copy()
2197 while(glh->nfree < nseg && glh->nbusy > 0) in _glh_acquire_copy()
2198 _glh_discard_line(glh, glh->list.head); in _glh_acquire_copy()
2203 if(glh->nfree < nseg) in _glh_acquire_copy()
2209 for(i=0,seg=glh->unused; i<nseg-1; i++,seg=seg->next, offset+=GLH_SEG_SIZE) in _glh_acquire_copy()
2216 hnode = (GlhHashNode *) _new_FreeListNode(glh->hash.node_mem); in _glh_acquire_copy()
2223 hnode->head = glh->unused; in _glh_acquire_copy()
2224 glh->unused = seg->next; in _glh_acquire_copy()
2226 glh->nbusy += nseg; in _glh_acquire_copy()
2227 glh->nfree -= nseg; in _glh_acquire_copy()
2259 static GlhHashNode *_glh_discard_copy(GlHistory *glh, GlhHashNode *hnode) in _glh_discard_copy() argument
2300 tail->next = glh->unused; in _glh_discard_copy()
2301 glh->unused = hnode->head; in _glh_discard_copy()
2302 glh->nbusy -= nseg; in _glh_discard_copy()
2303 glh->nfree += nseg; in _glh_discard_copy()
2308 hnode = (GlhHashNode *) _del_FreeListNode(glh->hash.node_mem, hnode); in _glh_discard_copy()
2329 static GlhHashBucket *glh_find_bucket(GlHistory *glh, const char *line, in glh_find_bucket() argument
2338 return glh->hash.bucket + (h % GLH_HASH_SIZE); in glh_find_bucket()
2495 static int _glh_prepare_for_recall(GlHistory *glh, char *line) in _glh_prepare_for_recall() argument
2504 if(glh->recall && glh->recall == glh->list.tail && in _glh_prepare_for_recall()
2505 !_glh_is_line(glh->recall->line, line, strlen(line))) { in _glh_prepare_for_recall()
2506 _glh_cancel_search(glh); in _glh_prepare_for_recall()
2513 if(!glh->recall) { in _glh_prepare_for_recall()
2514 if(_glh_add_history(glh, line, 1)) in _glh_prepare_for_recall()
2516 glh->recall = glh->list.tail; in _glh_prepare_for_recall()
2522 glh->seq--; in _glh_prepare_for_recall()
2536 int _glh_search_active(GlHistory *glh) in _glh_search_active() argument
2538 return glh && glh->recall; in _glh_search_active()