mdview2: чинить детект лимита строк + кламп файлов >256 КБ
1. Лимит строк не показывал предупреждение: g_trunc_cause=TRUNC_LINES ставился в emit_seg, но главный цикл выходит по n_lines<max_lines ДО вызова emit_seg в переполненном состоянии (для code-block — один emit_seg на строку). Теперь ловим после цикла по признаку p<file_size (остановились, файл не кончился). 2. Файл >256 КБ больше не отвергаем экраном ошибки, а КЛАМПим: читаем первые 256 КБ, индексатор дописывает строку TRUNC_FILE (File too large - truncated at 256 KB). Приоритет ниже content/lines. Текст ошибки -2 поправлен (был 'size > 128K'). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -186,6 +186,7 @@ uint8_t index_blk = 0; /* extern: дескриптор
|
||||
uint8_t index_pages = 0; /* */
|
||||
uint8_t index_phys[MAX_INDEX_PAGES] = {0}; /* extern: физ. страницы индекса */
|
||||
uint8_t index_truncated = 0; /* выставляется при исчерпании ёмкости индекса */
|
||||
uint8_t g_file_clamped = 0; /* extern: файл >256 КБ обрезан до MAX_FILE при загрузке */
|
||||
|
||||
/* cur_seg_off/cur_rec (near-состояние индексатора) — в mdview2_index.c. */
|
||||
uint8_t cur_page = 0xFF; /* extern: 0xFF = в W3 ещё не показана ни одна страница (extern: кодек инвалидирует) */
|
||||
@@ -444,10 +445,17 @@ static int load_file(const char *path)
|
||||
return -1;
|
||||
|
||||
long sz = lseek(fd, 0, SEEK_END);
|
||||
if (sz < 0 || (uint32_t)sz > MAX_FILE) {
|
||||
if (sz < 0) {
|
||||
close(fd);
|
||||
return -2;
|
||||
}
|
||||
/* Файл больше MAX_FILE (256 КБ) не отвергаем, а КЛАМПим: читаем первые
|
||||
* 256 КБ, индексатор допишет строку-предупреждение (TRUNC_FILE). */
|
||||
g_file_clamped = 0;
|
||||
if ((uint32_t)sz > MAX_FILE) {
|
||||
sz = (long)MAX_FILE;
|
||||
g_file_clamped = 1;
|
||||
}
|
||||
|
||||
file_size = (uint32_t)sz;
|
||||
lseek(fd, 0, SEEK_SET);
|
||||
@@ -911,7 +919,7 @@ int main(int argc, char **argv)
|
||||
cputs("'\n\rError: ");
|
||||
switch (rc) {
|
||||
case -1: cputs("open failed"); break;
|
||||
case -2: cputs("size > 128K or seek failed"); break;
|
||||
case -2: cputs("seek failed"); break;
|
||||
case -3: cputs("mem_alloc_pages failed"); break;
|
||||
case -4: cputs("short read"); break;
|
||||
case -5: cputs("index alloc failed"); break;
|
||||
|
||||
Reference in New Issue
Block a user