mirror of
https://github.com/Tiiffi/mcrcon.git
synced 2025-10-28 11:51:08 -04:00
Implement platform specific input buffer flushing
This commit is contained in:
23
mcrcon.c
23
mcrcon.c
@ -39,7 +39,9 @@
|
|||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
#else
|
#else
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <sys/select.h>
|
||||||
#include <netdb.h>
|
#include <netdb.h>
|
||||||
|
#include <termios.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define VERSION "0.8.0"
|
#define VERSION "0.8.0"
|
||||||
@ -720,7 +722,7 @@ int run_terminal_mode(int sock)
|
|||||||
{
|
{
|
||||||
char command[MAX_COMMAND_LENGTH] = {0};
|
char command[MAX_COMMAND_LENGTH] = {0};
|
||||||
|
|
||||||
puts("Logged in. Press Ctrl-D or Ctrl-C to disconnect.\n");
|
puts("Logged in. Press Ctrl-D or Ctrl-C to disconnect.");
|
||||||
|
|
||||||
while (global_connection_alive) {
|
while (global_connection_alive) {
|
||||||
putchar('>');
|
putchar('>');
|
||||||
@ -776,11 +778,6 @@ char *utf8_getline(char *buf, int size, FILE *stream)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Test if this is even required.
|
|
||||||
|
|
||||||
wint_t ch;
|
|
||||||
while ((ch = getwchar()) != L'\n' && ch != WEOF);
|
|
||||||
|
|
||||||
// Calculates UTF-8 buffer size
|
// Calculates UTF-8 buffer size
|
||||||
int required_size = WideCharToMultiByte(CP_UTF8, 0, in, -1, NULL, 0, NULL, NULL);
|
int required_size = WideCharToMultiByte(CP_UTF8, 0, in, -1, NULL, 0, NULL, NULL);
|
||||||
if (size < required_size) {
|
if (size < required_size) {
|
||||||
@ -797,6 +794,15 @@ char *utf8_getline(char *buf, int size, FILE *stream)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void flush_input(void)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
FlushConsoleInputBuffer(console_handle);
|
||||||
|
#else
|
||||||
|
tcflush(STDIN_FILENO, TCIFLUSH);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// gets line from stdin and deals with rubbish left in the input buffer
|
// gets line from stdin and deals with rubbish left in the input buffer
|
||||||
int get_line(char *buffer, int bsize)
|
int get_line(char *buffer, int bsize)
|
||||||
{
|
{
|
||||||
@ -805,6 +811,9 @@ int get_line(char *buffer, int bsize)
|
|||||||
#else
|
#else
|
||||||
char *ret = fgets(buffer, bsize, stdin);
|
char *ret = fgets(buffer, bsize, stdin);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
flush_input();
|
||||||
|
|
||||||
if (ret == NULL) {
|
if (ret == NULL) {
|
||||||
if (ferror(stdin)) {
|
if (ferror(stdin)) {
|
||||||
log_error("Error %d: %s\n", errno, strerror(errno));
|
log_error("Error %d: %s\n", errno, strerror(errno));
|
||||||
@ -818,6 +827,7 @@ int get_line(char *buffer, int bsize)
|
|||||||
buffer[strcspn(buffer, "\r\n")] = '\0';
|
buffer[strcspn(buffer, "\r\n")] = '\0';
|
||||||
int len = strlen(buffer);
|
int len = strlen(buffer);
|
||||||
|
|
||||||
|
#if 0
|
||||||
// clean input buffer if needed
|
// clean input buffer if needed
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
if (len == bsize - 1) {
|
if (len == bsize - 1) {
|
||||||
@ -825,6 +835,7 @@ int get_line(char *buffer, int bsize)
|
|||||||
while ((ch = getchar()) != '\n' && ch != EOF);
|
while ((ch = getchar()) != '\n' && ch != EOF);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user