Skip to content

Commit c6ba295

Browse files
authored
Merge pull request jupyter-xeus#165 from flagarde/master
Supress undef ERROR
2 parents 932ca39 + f011521 commit c6ba295

File tree

3 files changed

+44
-16
lines changed

3 files changed

+44
-16
lines changed

cpp-terminal/private/platform.cpp

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
#include "platform.hpp"
22

3+
#ifdef _WIN32
4+
#include <conio.h>
5+
#include <io.h>
6+
#include <windows.h>
7+
#else
8+
#include <sys/ioctl.h>
9+
#include <termios.h>
10+
#include <unistd.h>
11+
#include <cerrno>
12+
#endif
13+
14+
#include <stdexcept>
15+
316
#include "inputOutputModeFlags.hpp"
417

518
bool Term::Private::is_stdin_a_tty() {
@@ -108,10 +121,12 @@ Term::Private::BaseTerminal::~BaseTerminal() noexcept(false) {
108121
}
109122
#else
110123
if (keyboard_enabled) {
111-
if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &orig_termios) == -1) {
124+
if (tcsetattr(STDIN_FILENO, TCSAFLUSH, orig_termios.get()) == -1) {
112125
throw std::runtime_error("tcsetattr() failed in destructor");
113126
}
114127
}
128+
// Just to let it living longer
129+
orig_termios.get();
115130
#endif
116131
}
117132

@@ -160,17 +175,21 @@ Term::Private::BaseTerminal::BaseTerminal(bool enable_keyboard,
160175
#else
161176
Term::Private::BaseTerminal::BaseTerminal(bool enable_keyboard,
162177
bool disable_ctrl_c)
163-
: keyboard_enabled{enable_keyboard} {
178+
: orig_termios{std::unique_ptr<termios>(new termios)},
179+
keyboard_enabled{enable_keyboard} {
164180
// Uncomment this to silently disable raw mode for non-tty
165181
// if (keyboard_enabled) keyboard_enabled = is_stdin_a_tty();
166182
if (keyboard_enabled) {
167-
if (tcgetattr(STDIN_FILENO, &orig_termios) == -1) {
183+
if (tcgetattr(STDIN_FILENO, orig_termios.get()) == -1) {
168184
throw std::runtime_error("tcgetattr() failed");
169185
}
170186

171187
// Put terminal in raw mode
172-
struct termios raw = orig_termios;
188+
189+
struct termios raw = termios(*orig_termios.get());
190+
173191
raw.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
192+
174193
// This disables output post-processing, requiring explicit \r\n. We
175194
// keep it enabled, so that in C++, one can still just use std::endl
176195
// for EOL instead of "\r\n".

cpp-terminal/private/platform.hpp

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,28 @@
11
#pragma once
22

33
#ifdef _WIN32
4-
#include <conio.h>
5-
#include <io.h>
6-
#include <windows.h>
4+
#define NOMINMAX
5+
#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || \
6+
defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)
7+
#ifndef _AMD64_
8+
#define _AMD64_
9+
#endif
10+
#elif defined(i386) || defined(__i386) || defined(__i386__) || \
11+
defined(__i386__) || defined(_M_IX86)
12+
#ifndef _X86_
13+
#define _X86_
14+
#endif
15+
#elif defined(__arm__) || defined(_M_ARM) || defined(_M_ARMT)
16+
#ifndef _ARM_
17+
#define _ARM_
18+
#endif
19+
#endif
20+
#include <minwindef.h>
21+
#undef NOMINMAX
722
#else
8-
#include <sys/ioctl.h>
9-
#include <termios.h>
10-
#include <unistd.h>
11-
#include <cerrno>
23+
class termios;
24+
#include <memory>
1225
#endif
13-
#include <stdexcept>
1426

1527
namespace Term::Private {
1628
// Returns true if the standard input is attached to a terminal
@@ -41,7 +53,7 @@ class BaseTerminal {
4153
DWORD dwOriginalInMode{};
4254
UINT in_code_page;
4355
#else
44-
struct termios orig_termios {};
56+
std::unique_ptr<termios> orig_termios{nullptr};
4557
#endif
4658
bool keyboard_enabled{};
4759

cpp-terminal/prompt.hpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33
#include <cpp-terminal/window.hpp>
44
#include <functional>
55

6-
// TODO: remove windows.h include and this undefine
7-
#undef ERROR
8-
96
namespace Term {
107
/* Basic prompt */
118

0 commit comments

Comments
 (0)