Wed May 22 16:52:37 2002 Michael Jennings (mej)

Cleanups of Escreen stuff.  Always use MALLOC/FREE, not malloc/free.


SVN revision: 6272
This commit is contained in:
Michael Jennings 2002-05-22 20:55:06 +00:00
parent e249cd37f6
commit 1aa62bc29c
6 changed files with 79 additions and 88 deletions

View File

@ -4671,3 +4671,7 @@ Wed May 22 16:17:24 2002 Michael Jennings (mej)
Fixed duplicate freeing of menu background pixmap.
----------------------------------------------------------------------
Wed May 22 16:52:37 2002 Michael Jennings (mej)
Cleanups of Escreen stuff. Always use MALLOC/FREE, not malloc/free.
----------------------------------------------------------------------

View File

@ -2472,7 +2472,7 @@ upd_disp(void *xd, int n, int flags, char *name)
if (name && (!button->text || strcmp(name, button->text))) {
if (button->text)
free(button->text);
FREE(button->text);
if (!(button->text = strdup(name))) {
button->len = 0;
@ -2509,7 +2509,7 @@ err_msg(void *xd, int err, char *msg)
}
}
if (n >= nsc) {
menu_dial(NULL, msg, 0, NULL, NULL);
menu_dialog(NULL, msg, 0, NULL, NULL);
}
}
return NS_SUCC;
@ -2529,9 +2529,9 @@ inp_text(void *xd, int id, char *txt)
/* open a dialog */
int
inp_dial(void *xd, char *prompt, int maxlen, char **retstr, int (*inp_tab) (void *, char *, size_t, size_t))
input_dialog(void *xd, char *prompt, int maxlen, char **retstr, int (*inp_tab) (void *, char *, size_t, size_t))
{
switch (menu_dial(xd, prompt, maxlen, retstr, inp_tab)) {
switch (menu_dialog(xd, prompt, maxlen, retstr, inp_tab)) {
case 0:
return NS_SUCC;
case -2:
@ -2633,7 +2633,7 @@ matrix(int n)
{
int x, y, w, f;
int ys = TermWin.saveLines - TermWin.view_start;
text_t *s = malloc(TermWin.ncol);
text_t *s = MALLOC(TermWin.ncol);
text_t *t, *t2;
rend_t *r, *r2;
@ -2703,7 +2703,7 @@ matrix(int n)
}
scr_refresh(FAST_REFRESH);
}
free(s);
FREE(s);
}
@ -2768,7 +2768,7 @@ init_command(char **argv)
ns_register_exe(efuns, exe_prg);
ns_register_txt(efuns, inp_text);
ns_register_inp(efuns, inp_dial);
ns_register_inp(efuns, input_dialog);
ns_register_tab(efuns, menu_tab);
ns_register_fun(efuns, waitstate);

View File

@ -16,7 +16,8 @@
* 2002/05/18 Azundris remote handling improved (thanks tillsan, tfing)
***************************************************************************/
#include "config.h"
#include "src/feature.h"
#include <stdio.h> /* stderr, fprintf, snprintf() */
#include <string.h> /* bzero() */
@ -31,6 +32,8 @@
#include <ctype.h> /* isspace() */
#include <errno.h> /* errno */
#include <libast.h>
#include "scream.h" /* structs, defs, headers */
#include "screamcfg.h" /* user-tunables */
@ -76,20 +79,6 @@ static _ns_hop *ha = NULL; /* anchor for hop list */
/* ns_free
free a string (or whatever) */
void *
ns_free(char **x)
{
if (!x || !*x)
return;
free(*x);
*x = NULL;
}
/* ns_new_hop. create and initialize a hop struct.
lp local port. if 0: if otherwise matching hop exists, reuse that.
otherwise, find the first free (as in, not used
@ -125,7 +114,7 @@ ns_new_hop(int lp, char *fw, int fp, int delay, _ns_sess * s)
}
}
h = malloc(sizeof(_ns_hop));
h = MALLOC(sizeof(_ns_hop));
if (h) {
bzero(h, sizeof(_ns_hop));
if ((h->fw = strdup(fw))) {
@ -154,7 +143,7 @@ ns_new_hop(int lp, char *fw, int fp, int delay, _ns_sess * s)
h->sess = s;
ha = h;
} else {
free(h);
FREE(h);
return NULL;
}
}
@ -185,7 +174,7 @@ ns_dst_hop(_ns_hop ** ss, _ns_sess * sp)
if (!--(s->refcount)) { /* was last ref to hop => free hop */
if (s->fw)
free(s->fw);
FREE(s->fw);
#ifdef NS_DEBUG_MEM
bzero(s, sizeof(_ns_hop));
#endif
@ -198,7 +187,7 @@ ns_dst_hop(_ns_hop ** ss, _ns_sess * sp)
if (h)
h->next = s->next;
}
free(s);
FREE(s);
} else if (sp && sp->hop == s) {
/* hop shouldn't point back at a session that just dereffed it
as it's probably about to die. fix the back ref to a session
@ -223,7 +212,7 @@ ns_dst_hop(_ns_hop ** ss, _ns_sess * sp)
_ns_efuns *
ns_new_efuns(void)
{
_ns_efuns *s = malloc(sizeof(_ns_efuns));
_ns_efuns *s = MALLOC(sizeof(_ns_efuns));
if (s) {
bzero(s, sizeof(_ns_efuns));
}
@ -250,7 +239,7 @@ ns_dst_efuns(_ns_efuns ** ss)
#ifdef NS_DEBUG_MEM
bzero(s, sizeof(_ns_efuns));
#endif
free(s);
FREE(s);
}
}
return NULL;
@ -261,7 +250,7 @@ ns_dst_efuns(_ns_efuns ** ss)
_ns_disp *
ns_new_disp(void)
{
_ns_disp *s = malloc(sizeof(_ns_disp));
_ns_disp *s = MALLOC(sizeof(_ns_disp));
if (s) {
bzero(s, sizeof(_ns_disp));
}
@ -276,7 +265,7 @@ ns_dst_disp(_ns_disp ** ss)
if (ss && *ss) {
_ns_disp *s = *ss;
if (s->name)
free(s->name);
FREE(s->name);
if (s->efuns)
ns_dst_efuns(&(s->efuns));
if (s->child) /* nested screen? */
@ -285,7 +274,7 @@ ns_dst_disp(_ns_disp ** ss)
#ifdef NS_DEBUG_MEM
bzero(s, sizeof(_ns_disp));
#endif
free(s);
FREE(s);
}
return NULL;
}
@ -310,7 +299,7 @@ ns_dst_dsps(_ns_disp ** ss)
_ns_sess *
ns_new_sess(void)
{
_ns_sess *s = malloc(sizeof(_ns_sess));
_ns_sess *s = MALLOC(sizeof(_ns_sess));
if (s) {
bzero(s, sizeof(_ns_sess));
s->escape = NS_SCREEN_ESCAPE; /* default setup for the screen program */
@ -337,11 +326,11 @@ ns_dst_sess(_ns_sess ** ss)
if (s->hop)
ns_dst_hop(&(s->hop), s);
if (s->host)
free(s->host);
FREE(s->host);
if (s->user)
free(s->user);
FREE(s->user);
if (s->pass)
free(s->pass);
FREE(s->pass);
if (s->efuns)
ns_dst_efuns(&(s->efuns));
if (s->prvs)
@ -354,7 +343,7 @@ ns_dst_sess(_ns_sess ** ss)
#ifdef NS_DEBUG_MEM
bzero(s, sizeof(_ns_sess));
#endif
free(s);
FREE(s);
}
return NULL;
}
@ -399,7 +388,7 @@ ns_screen_command(_ns_sess * sess, char *cmd)
ns_desc_string(c, "ns_screen_command: xlated string");
#endif
efuns->inp_text(NULL, sess->fd, c);
free(c);
FREE(c);
} else {
/* out of memory */
ret = NS_OOM;
@ -423,7 +412,7 @@ ns_screen_xcommand(_ns_sess * s, char prefix, char *cmd)
{
char *i;
int ret = NS_OOM;
if ((i = malloc(strlen(cmd) + 4))) {
if ((i = MALLOC(strlen(cmd) + 4))) {
size_t l = strlen(cmd) + 2;
strcpy(&i[2], cmd);
i[0] = s->escape;
@ -431,7 +420,7 @@ ns_screen_xcommand(_ns_sess * s, char prefix, char *cmd)
i[l] = '\n';
i[++l] = '\0';
ret = ns_screen_command(s, i);
free(i);
FREE(i);
}
return ret;
}
@ -503,7 +492,7 @@ ns_upd_stat(_ns_sess * s)
/* ns_inp_dial
/* ns_input_dialog
open a dialog
s the session
!retstr where we'll store a pointer to the result (the user's input)
@ -512,17 +501,17 @@ ns_upd_stat(_ns_sess * s)
int
ns_inp_dial(_ns_sess * s, char *prompt, int maxlen, char **retstr, int (*inp_tab) (void *, char *, size_t, size_t))
ns_input_dialog(_ns_sess * s, char *prompt, int maxlen, char **retstr, int (*inp_tab) (void *, char *, size_t, size_t))
{
_ns_efuns *efuns;
char *c;
int ret = NS_SUCC;
if (NS_EFUN_EXISTS(efuns, s, NULL, inp_dial)) {
(void) efuns->inp_dial((void *) s, prompt, maxlen, retstr, inp_tab);
if (NS_EFUN_EXISTS(efuns, s, NULL, input_dialog)) {
(void) efuns->input_dialog((void *) s, prompt, maxlen, retstr, inp_tab);
} else {
ret = NS_EFUN_NOT_SET;
fprintf(stderr, NS_PREFIX "ns_screen_command: sess->efuns->inp_dial not set!\n");
fprintf(stderr, NS_PREFIX "ns_screen_command: sess->efuns->input_dialog not set!\n");
}
return ret;
}
@ -764,7 +753,7 @@ ns_run(_ns_efuns * efuns, char *cmd)
}
while (*p);
if (!(args = malloc((n + 2) * sizeof(char *))))
if (!(args = MALLOC((n + 2) * sizeof(char *))))
goto fail;
for (p = cmd, c = 0; c < n; c++) {
@ -794,7 +783,7 @@ ns_run(_ns_efuns * efuns, char *cmd)
n = efuns->execute(NULL, args);
if (args)
free(args);
FREE(args);
return n;
fail:
@ -817,12 +806,12 @@ ns_make_call_el(char *tmpl, char *dflt, char *opt)
if (tmpl && dflt && *tmpl && strstr(tmpl, "%s")) {
l = strlen(tmpl) + (opt ? strlen(opt) : strlen(dflt)) - 1L;
if ((p = malloc(l))) {
if ((p = MALLOC(l))) {
r = snprintf(p, l, tmpl, opt ? opt : dflt);
if ((r >= 0) && (r < l)) {
return p;
}
free(p);
FREE(p);
}
}
return NULL;
@ -842,20 +831,20 @@ ns_make_call(_ns_sess * sess)
tmp = screen = ns_make_call_el(NS_SCREEN_CALL, NS_SCREEN_OPTS, sess->rsrc);
if (sess->backend == NS_MODE_NEGOTIATE) {
size_t r, l = strlen(NS_SCREEM_CALL) + strlen(scream) + strlen(screen) - 3;
if ((screem = malloc(l))) {
if ((screem = MALLOC(l))) {
r = snprintf(screem, l, NS_SCREEM_CALL, scream, screen);
#ifdef NS_PARANOID
if ((r < 0) || (r > l)) {
ns_free(&screem);
FREE(screem);
}
#endif
}
tmp = screem;
}
call = ns_make_call_el(NS_WRAP_CALL, tmp, NULL);
ns_free(&screen);
ns_free(&scream);
ns_free(&screem);
FREE(screen);
FREE(scream);
FREE(screem);
return call;
}
@ -879,10 +868,10 @@ ns_attach_lcl(_ns_sess ** sp)
if (call = ns_make_call(sess)) {
char *c2 = ns_make_call_el("/bin/sh -c \"%s\"", call, NULL);
ns_free(&call);
FREE(call);
if (c2) {
ret = ns_run(sess->efuns, c2);
ns_free(&c2);
FREE(c2);
}
}
return ret;
@ -926,7 +915,7 @@ ns_attach_ssh(_ns_sess ** sp)
snprintf(cmd, NS_MAXCMD, "%s %s -p %d %s@%s \"%s -e^%c%c\"", NS_SSH_CALL, NS_SSH_OPTS, sess->port, sess->user, sess->host, call,
sess->escape + 'A' - 1, sess->literal);
}
ns_free(&call);
FREE(call);
#ifdef NS_DEBUG
fprintf(stderr, "\n\n>>%s\n>>%s\n\n", call, cmd);
fflush(stderr);
@ -1103,7 +1092,7 @@ ns_attach_by_URL(char *url, char *hop, _ns_efuns ** ef, int *err, void *xd)
fprintf(stderr, NS_PREFIX "URL: path for screen's option -c should be absolute (%s)\n", r);
if ((rc = strdup(r))) {
if (sess->home) /* this should never happen */
free(sess->home);
FREE(sess->home);
#ifdef NS_DEBUG
fprintf(stderr, NS_PREFIX "URL: searching for rc in %s\n", rc);
#endif
@ -1141,7 +1130,7 @@ ns_attach_by_URL(char *url, char *hop, _ns_efuns ** ef, int *err, void *xd)
if (strlen(q) && !(sess->host = strdup(q))) /* host, if any */
goto fail;
free(d);
FREE(d);
}
sess->where = NS_SSH;
@ -1182,7 +1171,7 @@ ns_attach_by_URL(char *url, char *hop, _ns_efuns ** ef, int *err, void *xd)
if (getenv("SCREENRC")) { /* $SCREENRC */
sess->home = strdup(getenv("SCREENRC"));
} else if (pwe && !sess->home) { /* ~/.screenrc */
if ((sess->home = malloc(strlen(pwe->pw_dir) + strlen(NS_SCREEN_RC) + 2)))
if ((sess->home = MALLOC(strlen(pwe->pw_dir) + strlen(NS_SCREEN_RC) + 2)))
sprintf(sess->home, "%s/%s", pwe->pw_dir, NS_SCREEN_RC);
} else
goto fail;
@ -1229,7 +1218,7 @@ ns_attach_by_URL(char *url, char *hop, _ns_efuns ** ef, int *err, void *xd)
fail:
if (d)
free(d);
FREE(d);
return ns_dst_sess(&sess);
}
@ -1348,9 +1337,9 @@ ns_register_txt(_ns_efuns * efuns, int (*inp_text) (void *, int, char *))
/* function that will open a dialog */
void
ns_register_inp(_ns_efuns * efuns, int (*inp_dial) (void *, char *, int, char **, int (*)(void *, char *, size_t, size_t)))
ns_register_inp(_ns_efuns * efuns, int (*input_dialog) (void *, char *, int, char **, int (*)(void *, char *, size_t, size_t)))
{
efuns->inp_dial = inp_dial;
efuns->input_dialog = input_dialog;
}
@ -1759,30 +1748,30 @@ ns_parse_screen_key(_ns_sess * s, char c)
switch (c) {
case NS_SCREEN_CMD: /* send command (statement) to screen server */
(void) ns_inp_dial((void *) s, "Enter a command to send to the \"screen\" program", 64, &i, ns_inp_tab);
(void) ns_input_dialog((void *) s, "Enter a command to send to the \"screen\" program", 64, &i, ns_inp_tab);
if (i) {
if ((ret = ns_parse_screen_cmd(s, i, NS_ESC_INTERACTIVE)) == NS_SUCC) {
ret = ns_screen_xcommand(s, c, i);
} else if (ret == NS_NOT_ALLOWED) {
menu_dial(NULL, "Sorry, David, I cannot allow that.", 0, NULL, NULL);
menu_dialog(NULL, "Sorry, David, I cannot allow that.", 0, NULL, NULL);
}
free(i);
FREE(i);
}
break;
case NS_SCREEN_RENAME: /* rename current display */
i = s->curr->name;
l = strlen(i);
(void) ns_inp_dial(s, "Enter a new name for the current display", 12, &i, NULL);
(void) ns_input_dialog(s, "Enter a new name for the current display", 12, &i, NULL);
if (i && *i) {
char *n;
if ((n = malloc(strlen(i) + l + 1))) {
if ((n = MALLOC(strlen(i) + l + 1))) {
strcpy(&n[l], i);
while (l)
n[--l] = '\x08';
ret = ns_screen_xcommand(s, c, n);
free(n);
FREE(n);
}
free(i);
FREE(i);
}
break;
default:
@ -1832,7 +1821,7 @@ ns_parse_screen_interactive(_ns_sess * sess, char *c)
(void) ns_screen_command(sess, s);
#ifdef NS_PARANOID
free(o);
FREE(o);
#endif
return NS_SUCC;
@ -1861,7 +1850,7 @@ ns_parse_screenrc(_ns_sess * s, char *fn, int whence)
if ((fd = open(fn, 0)) >= 0) {
if (!fstat(fd, &st)) {
if ((rc = malloc(st.st_size + 1))) {
if ((rc = MALLOC(st.st_size + 1))) {
char *p;
while (((rd = read(fd, rc, st.st_size)) < 0) && (errno == EINTR));
if (rd < 0)
@ -1900,7 +1889,7 @@ ns_parse_screenrc(_ns_sess * s, char *fn, int whence)
ns_parse_screen_cmd(s, p, whence);
p = n; /* done, next line */
}
free(rc);
FREE(rc);
close(fd);
return NS_SUCC;
}
@ -1912,7 +1901,7 @@ ns_parse_screenrc(_ns_sess * s, char *fn, int whence)
if (fd >= 0)
close(fd);
if (rc)
free(rc);
FREE(rc);
return NS_FAIL;
}
@ -2068,7 +2057,7 @@ ns_parse_screen(_ns_sess * screen, int force, int width, char *p)
}
(void) ns_screen_command(screen, NS_SCREEN_INIT);
}
free(p);
FREE(p);
return ret;
}
@ -2140,9 +2129,9 @@ ns_parse_screen(_ns_sess * screen, int force, int width, char *p)
} else if ((tmp = strcmp(disp->name, pd[r].name)) || /* upd display */
(disp->flags != pd[r].flags)) {
if (tmp) {
free(disp->name);
FREE(disp->name);
if (!(disp->name = strdup(pd[r].name))) {
free(p);
FREE(p);
return NS_FAIL;
}
}
@ -2189,7 +2178,7 @@ ns_parse_screen(_ns_sess * screen, int force, int width, char *p)
"beauty of your desktop is not relevant to this investigation. : ).\n");
}
ret = ns_upd_stat(screen);
free(p);
FREE(p);
return NS_FAIL;
} else
#endif
@ -2217,7 +2206,7 @@ ns_parse_screen(_ns_sess * screen, int force, int width, char *p)
else /* not a list of displays, but a message. handle separately. */
ret = ns_parse_screen_msg(screen, p);
free(p); /* release our (modified) copy of the status-line */
FREE(p); /* release our (modified) copy of the status-line */
}
/* send init string the first time around, just to be on the safe side.

View File

@ -1244,7 +1244,7 @@ menu_action(menuitem_t *item)
script_parse((char *) item->action.script);
break;
case MENUITEM_ALERT:
menu_dial(NULL, item->action.alert, 0, NULL, NULL);
menu_dialog(NULL, item->action.alert, 0, NULL, NULL);
break;
default:
fatal_error("Internal Program Error: Unknown menuitem type: %u\n", item->type);
@ -1294,7 +1294,6 @@ menu_invoke_by_title(int x, int y, Window win, char *title, Time timestamp)
l number of characters to compare in current entry
m maximum number of characters in entry (size of input buffer)
<- error code */
int
menu_tab(void *xd, char *sc[], int nsc, char *b, size_t l, size_t m)
{
@ -1332,9 +1331,8 @@ menu_tab(void *xd, char *sc[], int nsc, char *b, size_t l, size_t m)
inp_tab function doing tab-completion, NULL for none
<- error code (0 succ, -1 fail, -2 cancel)
*/
int
menu_dial(void *xd, char *prompt, int maxlen, char **retstr, int (*inp_tab) (void *, char *, size_t, size_t))
menu_dialog(void *xd, char *prompt, int maxlen, char **retstr, int (*inp_tab) (void *, char *, size_t, size_t))
{
static unsigned char short_buf[256];
unsigned char *kbuf = short_buf;
@ -1357,7 +1355,7 @@ menu_dial(void *xd, char *prompt, int maxlen, char **retstr, int (*inp_tab) (voi
if ((b = strdup("Press \"Return\" to continue...")) == NULL)
return ret;
} else {
if (((b = malloc(maxlen + 1)) == NULL))
if (((b = MALLOC(maxlen + 1)) == NULL))
return ret;
if (*retstr) {
strncpy(b, *retstr, maxlen);
@ -1445,6 +1443,6 @@ menu_dial(void *xd, char *prompt, int maxlen, char **retstr, int (*inp_tab) (voi
#endif
menu_delete(m);
}
free(b);
FREE(b);
return ret;
}

View File

@ -147,8 +147,8 @@ extern void menu_display(int, int, menu_t *);
extern void menu_action(menuitem_t *);
extern void menu_invoke(int, int, Window, menu_t *, Time);
extern void menu_invoke_by_title(int, int, Window, char *, Time);
extern int menu_tab(void *,char *[],int,char *,size_t,size_t);
extern int menu_dial(void *,char *, int, char **,int (*)(void *,char *,size_t,size_t));
extern int menu_tab(void *, char *[], int, char *, size_t, size_t);
extern int menu_dialog(void *, char *, int, char **, int (*)(void *, char *, size_t, size_t));
_XFUNCPROTOEND

View File

@ -137,7 +137,7 @@ typedef struct __ns_efuns { /* callbacks into the terminal program */
int (*err_msg)(void *,int,char *);
int (*execute)(void *,char **);
int (*inp_text)(void *,int,char *);
int (*inp_dial)(void *,char *,int,char **,int (*)(void *,char *,size_t,size_t));
int (*input_dialog)(void *,char *,int,char **,int (*)(void *,char *,size_t,size_t));
int (*inp_tab)(void *,char *[],int,char *,size_t,size_t);
int (*waitstate)(void *,int);
} _ns_efuns;
@ -212,7 +212,7 @@ int ns_rem_disp(_ns_sess *,int);
int ns_ren_disp(_ns_sess *,int,char *);
int ns_log_disp(_ns_sess *,int,char *);
int ns_upd_stat(_ns_sess *);
int ns_inp_dial(_ns_sess *,char *,int,char **,int (*)(void *,char *,size_t,size_t));
int ns_input_dialog(_ns_sess *,char *,int,char **,int (*)(void *,char *,size_t,size_t));