mirror of
https://github.com/Stichting-MINIX-Research-Foundation/pkgsrc-ng.git
synced 2025-08-03 09:48:00 -04:00
145 lines
3.8 KiB
Plaintext
145 lines
3.8 KiB
Plaintext
$NetBSD: patch-cw,v 1.5 2012/11/16 00:29:40 joerg Exp $
|
|
|
|
--- lib/libxview/textsw/txt_again.c.orig 1993-06-29 05:17:32.000000000 +0000
|
|
+++ lib/libxview/textsw/txt_again.c
|
|
@@ -28,6 +28,8 @@ Pkg_private CHAR *STRNCPY();
|
|
Pkg_private Es_index textsw_do_input();
|
|
Pkg_private Es_index textsw_do_pending_delete();
|
|
|
|
+static int textsw_string_min_free();
|
|
+
|
|
string_t null_string = {0, 0, 0};
|
|
|
|
#define TEXT_DELIMITER "\\"
|
|
@@ -182,6 +184,7 @@ textsw_string_min_free(ptr_to_string, mi
|
|
* Following is stolen from 3.2ALPHA sprintf(str, fmt, va_alist) SIDE_EFFECT:
|
|
* TXTSW_STRING_FREE(ptr_to_string) is modified by this routine.
|
|
*/
|
|
+#if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__)
|
|
#ifndef SVR4
|
|
|
|
/* VARARGS2 */
|
|
@@ -325,6 +328,46 @@ va_dcl
|
|
|
|
#endif /* SVR4 */
|
|
|
|
+#elif defined(__DragonFly__)
|
|
+static int
|
|
+textsw_printf(register string_t *ptr_to_string, char *fmt, ...)
|
|
+{
|
|
+ int result;
|
|
+ va_list args;
|
|
+
|
|
+ VA_START(args, fmt);
|
|
+ result = vsnprintf(TXTSW_STRING_FREE(ptr_to_string), ptr_to_string->max_length - TXTSW_STRING_LENGTH(ptr_to_string), fmt, args);
|
|
+ if (result >=0)
|
|
+ TXTSW_STRING_FREE(ptr_to_string) += result;
|
|
+ return(result);
|
|
+}
|
|
+
|
|
+
|
|
+#else /* __FreeBSD__ */
|
|
+/*inspiration taken from sprintf.c */
|
|
+
|
|
+static int
|
|
+textsw_printf(register string_t *ptr_to_string, char *fmt, ...)
|
|
+{
|
|
+ FILE _strbuf;
|
|
+ int result;
|
|
+ va_list args;
|
|
+ _strbuf._flags = __SWR | __SSTR;
|
|
+ _strbuf._bf._base = _strbuf._p = (char *) TXTSW_STRING_FREE(ptr_to_string);
|
|
+ _strbuf._bf._size = _strbuf._w = ptr_to_string->max_length - TXTSW_STRING_LENGTH(ptr_to_string);
|
|
+ VA_START(args, fmt);
|
|
+ result = vfprintf (&_strbuf, fmt, args);
|
|
+ va_end(args);
|
|
+ TXTSW_STRING_FREE(ptr_to_string) = (char *) _strbuf._p;
|
|
+#ifndef lint
|
|
+ if (result >= 0)
|
|
+ putc('\0', &_strbuf);
|
|
+#endif
|
|
+ return (result);
|
|
+}
|
|
+
|
|
+#endif /* __FreeBSD__ */
|
|
+
|
|
static void
|
|
textsw_record_buf(again, buffer, buffer_length)
|
|
register string_t *again;
|
|
@@ -619,6 +662,8 @@ textsw_record_trash_insert(textsw)
|
|
*/
|
|
/* VARARGS2 */
|
|
|
|
+#if !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__DragonFly__)
|
|
+
|
|
static int
|
|
#ifdef ANSI_FUNC_PROTO
|
|
textsw_scanf(register string_t *ptr_to_string, register char *fmt, ...)
|
|
@@ -705,6 +750,57 @@ va_dcl
|
|
|
|
#endif /* OW_I18N */
|
|
}
|
|
+#elif defined(__DragonFly__)
|
|
+static int
|
|
+textsw_scanf(register string_t *ptr_to_string, char *fmt, ...)
|
|
+{
|
|
+ va_list args;
|
|
+ int result;
|
|
+ size_t len = TXTSW_STRING_LENGTH(ptr_to_string);
|
|
+ char *str = malloc(len + 1);
|
|
+ if (str == NULL)
|
|
+ return -1;
|
|
+ memcpy(str, TXTSW_STRING_BASE(ptr_to_string), len);
|
|
+ str[len] = '\0';
|
|
+ VA_START(args, fmt);
|
|
+ result = vsscanf(str, fmt, args);
|
|
+ va_end(args);
|
|
+ free(str);
|
|
+ return(result);
|
|
+}
|
|
+
|
|
+#else /* __FreeBSD__ */
|
|
+/*inspiration/code taken from sscanf.c */
|
|
+
|
|
+static int
|
|
+eofread(cookie, buf, len)
|
|
+ void *cookie;
|
|
+ char *buf;
|
|
+ int len;
|
|
+{
|
|
+
|
|
+ return (0);
|
|
+}
|
|
+
|
|
+static int
|
|
+textsw_scanf(register string_t *ptr_to_string, char *fmt, ...)
|
|
+{
|
|
+ FILE _strbuf;
|
|
+ int result;
|
|
+ va_list args;
|
|
+
|
|
+ memset(&_strbuf, '\0', sizeof(_strbuf));
|
|
+ _strbuf._flags = __SRD;
|
|
+ _strbuf._bf._base = _strbuf._p = (char *) TXTSW_STRING_BASE(ptr_to_string);
|
|
+ _strbuf._bf._size = _strbuf._r = TXTSW_STRING_LENGTH(ptr_to_string);
|
|
+ _strbuf._read = eofread;
|
|
+ VA_START(args, fmt);
|
|
+ result = __svfscanf(&_strbuf, fmt, args);
|
|
+ va_end(args);
|
|
+ TXTSW_STRING_BASE(ptr_to_string) = (char *) _strbuf._p;
|
|
+ return (result);
|
|
+}
|
|
+#endif /* __FreeBSD__ */
|
|
|
|
static int
|
|
textsw_next_is_delimiter(again)
|
|
@@ -848,7 +944,7 @@ textsw_get_recorded_x(view)
|
|
int found_it_already = FALSE;
|
|
|
|
if (!TXTSW_DO_AGAIN(folio))
|
|
- return;
|
|
+ return -1;
|
|
again = &folio->again[0];
|
|
if (TXTSW_STRING_IS_NULL(again)) {
|
|
return (result);
|