Windows下zlog出力ログ長は1024でしか解決できません

1658 ワード

Windowsバージョン:https://github.com/lopsd07/WinZlog
Windowsの下に1024以上の文字を印刷できない問題があります.
主な問題はbuf.cでは243行程度、nwrite=vsnprintf(a_buf->tail,size_left,format,ap);linuxの下で、データapの長さがsize_より大きい場合left(バッファの大きさ)の長さの場合は、実際の文字の長さを返しますが、windowsの下では、実際の長さがsize_を超えています.leftの場合、バッファを超える長さを示す-1が返されます.これで後のnwriteの判断でエラーが発生します.次のように変更できます.
#define BUFFER_INTREVAL 1024

#ifdef _MSC_VER
    if (nwrite < 0 && a_buf->size_max > 0) {
        for (int buffer_size = size_left + BUFFER_INTREVAL; buffer_size <= a_buf->size_max;)
        {
            char *buffer = malloc(buffer_size);
            if (buffer == NULL) {
                break;
            }
            if ((nwrite = vsnprintf(buffer, buffer_size, format, ap)) >= 0)
            {
                free(buffer);
                buffer = NULL;
                break;
            }
            buffer_size += BUFFER_INTREVAL;
            free(buffer);
            buffer = NULL;
        }
    }
#endif 

1024の長さの成長空間を定義し、-1に戻ると、メモリを申請してメモリを解放し、適切なメモリ空間が得られるまでだけでよい.