Commit a1d29b0c authored by Ivan Trubach's avatar Ivan Trubach
Browse files

nfqws,tpws: always use line buffering for console IO

Forces stdout and stderr to always use line buffering. Note that glibc
does automatically flush on newline iff connected to a terminal, but
that is not the case when running under systemd. See also
https://www.gnu.org/software/libc/manual/html_node/Buffering-Concepts.html
https://www.gnu.org/software/libc/manual/html_node/Controlling-Buffering.html
parent 75660333
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -391,6 +391,12 @@ void fill_random_az09(uint8_t *p,size_t sz)
	}
}

void disable_console_io_buffering(void)
{
	setvbuf(stdout, NULL, _IOLBF, 0);
	setvbuf(stderr, NULL, _IOLBF, 0);
}

bool set_env_exedir(const char *argv0)
{
	char *s,*d;
+1 −0
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ void fill_random_bytes(uint8_t *p,size_t sz);
void fill_random_az(uint8_t *p,size_t sz);
void fill_random_az09(uint8_t *p,size_t sz);

void disable_console_io_buffering(void);
bool set_env_exedir(const char *argv0);


+1 −10
Original line number Diff line number Diff line
@@ -499,7 +499,6 @@ static int win_main(const char *windivert_filter)
		if (!logical_net_filter_match())
		{
			DLOG_CONDUP("logical network is not present. waiting it to appear.\n");
			fflush(stdout);
			do
			{
				if (bQuit)
@@ -512,7 +511,6 @@ static int win_main(const char *windivert_filter)
			}
			while (!logical_net_filter_match());
			DLOG_CONDUP("logical network now present\n");
			fflush(stdout);
		}

		if (!windivert_init(windivert_filter))
@@ -523,10 +521,6 @@ static int win_main(const char *windivert_filter)

		DLOG_CONDUP("windivert initialized. capture is started.\n");

		// cygwin auto flush fails when piping
		fflush(stdout);
		fflush(stderr);

		for (id=0;;id++)
		{
			len = sizeof(packet);
@@ -589,10 +583,6 @@ static int win_main(const char *windivert_filter)
				default:
					DLOG("packet: id=%u drop\n", id);
			}
	
			// cygwin auto flush fails when piping
			fflush(stdout);
			fflush(stderr);
		}
	}
	win_dark_deinit();
@@ -1424,6 +1414,7 @@ void check_dp(const struct desync_profile *dp)

int main(int argc, char **argv)
{
	disable_console_io_buffering();
	set_env_exedir(argv[0]);

#ifdef __CYGWIN__
+5 −0
Original line number Diff line number Diff line
@@ -383,6 +383,11 @@ bool pf_is_empty(const port_filter *pf)
	return !pf->neg && !pf->from && !pf->to;
}

void disable_console_io_buffering(void)
{
	setvbuf(stdout, NULL, _IOLBF, 0);
	setvbuf(stderr, NULL, _IOLBF, 0);
}

bool set_env_exedir(const char *argv0)
{
+1 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ bool pf_in_range(uint16_t port, const port_filter *pf);
bool pf_parse(const char *s, port_filter *pf);
bool pf_is_empty(const port_filter *pf);

void disable_console_io_buffering(void);
bool set_env_exedir(const char *argv0);

#ifndef IN_LOOPBACK
Loading