projects
/
ncurses.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ncurses 6.1 - patch 20191102
[ncurses.git]
/
ncurses
/
tinfo
/
lib_print.c
diff --git
a/ncurses/tinfo/lib_print.c
b/ncurses/tinfo/lib_print.c
index e5abd4de614533964c0b3c4e9d4b1a2e711f7c69..280fdfc0bdf81474f8771e51fba2221a531ff886 100644
(file)
--- a/
ncurses/tinfo/lib_print.c
+++ b/
ncurses/tinfo/lib_print.c
@@
-1,5
+1,5
@@
/****************************************************************************
/****************************************************************************
- * Copyright (c) 1998-20
06,2009
Free Software Foundation, Inc. *
+ * Copyright (c) 1998-20
12,2018
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 *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
@@
-39,17
+39,21
@@
#define CUR SP_TERMTYPE
#endif
#define CUR SP_TERMTYPE
#endif
-MODULE_ID("$Id: lib_print.c,v 1.
19 2009/06/06 20:26:1
7 tom Exp $")
+MODULE_ID("$Id: lib_print.c,v 1.
24 2018/06/24 00:06:3
7 tom Exp $")
NCURSES_EXPORT(int)
NCURSES_SP_NAME(mcprint) (NCURSES_SP_DCLx char *data, int len)
/* ship binary character data to the printer via mc4/mc5/mc5p */
{
NCURSES_EXPORT(int)
NCURSES_SP_NAME(mcprint) (NCURSES_SP_DCLx char *data, int len)
/* ship binary character data to the printer via mc4/mc5/mc5p */
{
+ int result;
char *mybuf, *switchon;
char *mybuf, *switchon;
- size_t onsize, offsize, res;
+ size_t onsize, offsize;
+ size_t need;
errno = 0;
errno = 0;
- if (!HasTInfoTerminal(SP_PARM) || (!prtr_non && (!prtr_on || !prtr_off))) {
+ if (!HasTInfoTerminal(SP_PARM)
+ || len <= 0
+ || (!prtr_non && (!prtr_on || !prtr_off))) {
errno = ENODEV;
return (ERR);
}
errno = ENODEV;
return (ERR);
}
@@
-64,16
+68,18
@@
NCURSES_SP_NAME(mcprint) (NCURSES_SP_DCLx char *data, int len)
offsize = strlen(prtr_off);
}
offsize = strlen(prtr_off);
}
+ need = onsize + (size_t) len + offsize;
+
if (switchon == 0
if (switchon == 0
- || (mybuf = typeMalloc(char,
onsize + len + offsize
+ 1)) == 0) {
+ || (mybuf = typeMalloc(char,
need
+ 1)) == 0) {
errno = ENOMEM;
return (ERR);
}
errno = ENOMEM;
return (ERR);
}
-
(void) strcpy(mybuf, switchon
);
- memcpy(mybuf + onsize, data, (
unsigned
) len);
+
_nc_STRCPY(mybuf, switchon, need
);
+ memcpy(mybuf + onsize, data, (
size_t
) len);
if (offsize)
if (offsize)
-
(void) strcpy(mybuf + onsize + len, prtr_off
);
+
_nc_STRCPY(mybuf + onsize + len, prtr_off, need
);
/*
* We're relying on the atomicity of UNIX writes here. The
/*
* We're relying on the atomicity of UNIX writes here. The
@@
-82,18
+88,18
@@
NCURSES_SP_NAME(mcprint) (NCURSES_SP_DCLx char *data, int len)
* data has actually been shipped to the terminal. If the write(2)
* operation is truly atomic we're protected from this.
*/
* data has actually been shipped to the terminal. If the write(2)
* operation is truly atomic we're protected from this.
*/
- res
= write(TerminalOf(SP_PARM)->Filedes, mybuf, onsize + len + offsize
);
+ res
ult = (int) write(TerminalOf(SP_PARM)->Filedes, mybuf, need
);
/*
* By giving up our scheduler slot here we increase the odds that the
* kernel will ship the contiguous clist items from the last write
* immediately.
*/
/*
* By giving up our scheduler slot here we increase the odds that the
* kernel will ship the contiguous clist items from the last write
* immediately.
*/
-#ifndef _
_MINGW32__
+#ifndef _
WIN32
(void) sleep(0);
#endif
free(mybuf);
(void) sleep(0);
#endif
free(mybuf);
- return (res);
+ return (res
ult
);
}
#if NCURSES_SP_FUNCS && !defined(USE_TERM_DRIVER)
}
#if NCURSES_SP_FUNCS && !defined(USE_TERM_DRIVER)