/****************************************************************************
- * Copyright (c) 1998-2017,2018 Free Software Foundation, Inc. *
+ * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
#include <sys/types.h>
#include <tic.h>
-MODULE_ID("$Id: read_termcap.c,v 1.96 2018/05/12 18:52:02 tom Exp $")
+MODULE_ID("$Id: read_termcap.c,v 1.98 2020/02/02 23:34:34 tom Exp $")
#if !PURE_TERMINFO
#endif
#if USE_GETCAP
char *p, tc[TBUFSIZ];
+ char *tc_buf = 0;
#define MY_SIZE sizeof(tc) - 1
int status;
static char *source;
if (use_terminfo_vars() && (p = getenv("TERMCAP")) != 0
&& !_nc_is_abs_path(p) && _nc_name_match(p, tn, "|:")) {
/* TERMCAP holds a termcap entry */
- _nc_STRNCPY(tc, p, MY_SIZE);
- tc[MY_SIZE] = '\0';
+ tc_buf = strdup(p);
_nc_set_source("TERMCAP");
} else {
/* we're using getcap(3) */
_nc_curr_line = lineno;
_nc_set_source(source);
+ tc_buf = tc;
}
- _nc_read_entry_source((FILE *) 0, tc, FALSE, TRUE, NULLHOOK);
+ if (tc_buf == 0)
+ return (TGETENT_ERR);
+ _nc_read_entry_source((FILE *) 0, tc_buf, FALSE, TRUE, NULLHOOK);
+ if (tc_buf != tc)
+ free(tc_buf);
#else
/*
* Here is what the 4.4BSD termcap(3) page prescribes:
int j, k;
bool use_buffer = FALSE;
bool normal = TRUE;
- char tc_buf[1024];
+ char *tc_buf = 0;
char pathbuf[PATH_MAX];
char *copied = 0;
char *cp;
ADD_TC(tc, 0);
normal = FALSE;
} else if (_nc_name_match(tc, tn, "|:")) { /* treat as a capability file */
- use_buffer = TRUE;
- _nc_SPRINTF(tc_buf,
- _nc_SLIMIT(sizeof(tc_buf))
- "%.*s\n", (int) sizeof(tc_buf) - 2, tc);
+ tc_buf = strdup(tc);
+ use_buffer = (tc_buf != 0);
normal = FALSE;
}
}
* that since it's just a single entry, they won't be a pain.
*/
_nc_read_entry_source((FILE *) 0, tc_buf, FALSE, FALSE, NULLHOOK);
+ free(tc_buf);
} else {
int i;