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の判断でエラーが発生します.次のように変更できます.
1024の長さの成長空間を定義し、-1に戻ると、メモリを申請してメモリを解放し、適切なメモリ空間が得られるまでだけでよい.
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に戻ると、メモリを申請してメモリを解放し、適切なメモリ空間が得られるまでだけでよい.