Просмотр исходного кода

Simplify unescape() in no locale mode

master
Arun Prakash Jana 4 лет назад
Родитель
Сommit
ff568ea748
Не найден GPG ключ соответствующий данной подписи Идентификатор GPG ключа: A75979F35C080412
1 измененных файлов: 22 добавлений и 4 удалений
  1. +22
    -4
      src/nnn.c

+ 22
- 4
src/nnn.c Просмотреть файл

@@ -3049,16 +3049,13 @@ static void resetdircolor(int flags)
* Adjust string length to maxcols if > 0;
* Max supported str length: NAME_MAX;
*/
#ifndef NOLOCALE
static wchar_t *unescape(const char *str, uint maxcols)
{
wchar_t * const wbuf = (wchar_t *)g_buf;
wchar_t *buf = wbuf;
size_t lencount = 0;

#ifdef NOLOCALE
memset(wbuf, 0, (NAME_MAX + 1) * sizeof(wchar_t));
#endif

/* Convert multi-byte to wide char */
size_t len = mbstowcs(wbuf, str, NAME_MAX);

@@ -3091,6 +3088,19 @@ static wchar_t *unescape(const char *str, uint maxcols)

return wbuf;
}
#else
static char *unescape(const char *str, uint maxcols)
{
ssize_t len = (ssize_t)xstrsncpy(g_buf, str, maxcols);

--len;
while (--len >= 0)
if (g_buf[len] <= '\x1f' || g_buf[len] == '\x7f')
g_buf[len] = '\?';

return g_buf;
}
#endif

static char *coolsize(off_t size)
{
@@ -3241,7 +3251,11 @@ static void printent(const struct entry *ent, uint namecols, bool sel)

if (attrs)
attron(attrs);
#ifndef NOLOCALE
addwstr(unescape(ent->name, namecols));
#else
addstr(unescape(ent->name, MIN(namecols, ent->nlen) + 1));
#endif
if (attrs)
attroff(attrs);

@@ -3326,7 +3340,11 @@ static void printent_long(const struct entry *ent, uint namecols, bool sel)
attroff(A_DIM);
attrs ^= A_DIM;
}
#ifndef NOLOCALE
addwstr(unescape(ent->name, namecols));
#else
addstr(unescape(ent->name, MIN(namecols, ent->nlen) + 1));
#endif
if (attrs)
attroff(attrs);
if (ind2)


Загрузка…
Отмена
Сохранить