Skip to content

Commit 1d7e923

Browse files
committed
Merge branch 'frazze/stdlib/io_ansi_handle_enotsup/OTP-20028'
2 parents 59606cb + fd3d7f3 commit 1d7e923

2 files changed

Lines changed: 19 additions & 4 deletions

File tree

erts/emulator/nifs/common/prim_tty_nif.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -766,13 +766,19 @@ static ERL_NIF_TERM setlocale_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM a
766766
return atom_false;
767767
#endif
768768
}
769-
769+
#ifdef HAVE_TERMCAP
770+
static TERMINAL *saved_term = NULL;
771+
#endif
770772
static ERL_NIF_TERM tty_setupterm_nif(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
771773
#ifdef HAVE_TERMCAP
772774
int errret;
773775
if (setupterm(NULL, -1, &errret) < 0) {
774776
return make_errno_error(env, "setupterm");
775777
}
778+
if (saved_term) {
779+
del_curterm(saved_term);
780+
}
781+
saved_term = cur_term;
776782
return atom_ok;
777783
#else
778784
return make_enotsup(env);
@@ -1257,7 +1263,12 @@ static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
12571263

12581264
static void unload(ErlNifEnv* env, void* priv_data)
12591265
{
1260-
1266+
#ifdef HAVE_TERMCAP
1267+
if (saved_term) {
1268+
del_curterm(saved_term);
1269+
saved_term = NULL;
1270+
}
1271+
#endif
12611272
}
12621273

12631274
static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data,

lib/stdlib/src/io_ansi.erl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2506,7 +2506,9 @@ init_mappings() ->
25062506
9 -> fun(A, B, C, D, E, F, G, H, I) -> {ok, S} = prim_tty:tputs(TermInfoStr, [A, B , C, D, E, F, G, H, I]), S end
25072507
end,
25082508
{ Arity, #{ terminfo => TermInfoFun, ansi => AnsiFun }};
2509-
false -> Fun({undefined, AnsiFun})
2509+
false -> Fun({undefined, AnsiFun});
2510+
{error, enotsup} ->
2511+
Fun({undefined, AnsiFun})
25102512
catch error:badarg ->
25112513
Fun({undefined, AnsiFun})
25122514
end;
@@ -2517,7 +2519,9 @@ init_mappings() ->
25172519
{0, #{ terminfo => fun() -> TermInfoStr end,
25182520
ansi => fun() -> AnsiString end } };
25192521
false ->
2520-
Fun({undefined, AnsiString})
2522+
Fun({undefined, AnsiString});
2523+
{error, enotsup} ->
2524+
Fun({undefined, AnsiString})
25212525
catch error:badarg ->
25222526
Fun({undefined, AnsiString})
25232527
end;

0 commit comments

Comments
 (0)