diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 5c5b6aea9e3..35b4b47e986 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -26,20 +26,6 @@ static PyStringObject *nullstring; static PyObject *interned; -#if defined(HAVE_MBTOWC) && defined(HAVE_WCHAR_H) && defined(HAVE_WCTYPE_H) -# define PRINT_MULTIBYTE_STRING -# include -# include -# include -# if defined(HAVE_ISWPRINT) -# define _isprint iswprint -# else -# define _isprint isprint -# endif -#endif - -static const char *hexchars = "0123456789abcdef"; - /* For both PyString_FromString() and PyString_FromStringAndSize(), the parameter `size' denotes number of characters to allocate, not counting any @@ -763,14 +749,8 @@ PyString_AsStringAndSize(register PyObject *obj, static int string_print(PyStringObject *op, FILE *fp, int flags) { -#ifndef PRINT_MULTIBYTE_STRING int i; char c; -#else - char *scur, *send; - wchar_t c; - int cr; -#endif int quote; /* XXX Ought to check for interrupts when writing long strings */ @@ -796,36 +776,20 @@ string_print(PyStringObject *op, FILE *fp, int flags) quote = '"'; fputc(quote, fp); -#ifndef PRINT_MULTIBYTE_STRING for (i = 0; i < op->ob_size; i++) { c = op->ob_sval[i]; -#else - for (scur = op->ob_sval, send = op->ob_sval + op->ob_size; - scur < send; scur += cr) { - if ((cr = mbtowc(&c, scur, send - scur)) <= 0) - goto non_printable; -#endif if (c == quote || c == '\\') - fputc('\\', fp), fputc(c, fp); + fprintf(fp, "\\%c", c); else if (c == '\t') - fputs("\\t", fp); + fprintf(fp, "\\t"); else if (c == '\n') - fputs("\\n", fp); + fprintf(fp, "\\n"); else if (c == '\r') - fputs("\\r", fp); -#ifndef PRINT_MULTIBYTE_STRING - else if (' ' <= c && c < 0x7f) - fputc(c, fp); + fprintf(fp, "\\r"); + else if (c < ' ' || c >= 0x7f) + fprintf(fp, "\\x%02x", c & 0xff); else - fprintf(fp, "\\x%02x", c & 0xff); -#else - else if (_isprint(c)) - fwrite(scur, cr, 1, fp); - else { -non_printable: cr = 1; /* unit to move cursor */ - fprintf(fp, "\\x%02x", *scur & 0xff); - } -#endif + fputc(c, fp); } fputc(quote, fp); return 0; @@ -846,14 +810,8 @@ PyString_Repr(PyObject *obj, int smartquotes) return NULL; } else { -#ifndef PRINT_MULTIBYTE_STRING register int i; register char c; -#else - register char *scur, *send; - wchar_t c; - int cr; -#endif register char *p; int quote; @@ -866,18 +824,11 @@ PyString_Repr(PyObject *obj, int smartquotes) p = PyString_AS_STRING(v); *p++ = quote; -#ifndef PRINT_MULTIBYTE_STRING for (i = 0; i < op->ob_size; i++) { /* There's at least enough room for a hex escape and a closing quote. */ assert(newsize - (p - PyString_AS_STRING(v)) >= 5); c = op->ob_sval[i]; -#else - for (scur = op->ob_sval, send = op->ob_sval + op->ob_size; - scur < send; scur += cr) { - if ((cr = mbtowc(&c, scur, send - scur)) <= 0) - goto non_printable; -#endif if (c == quote || c == '\\') *p++ = '\\', *p++ = c; else if (c == '\t') @@ -886,20 +837,15 @@ PyString_Repr(PyObject *obj, int smartquotes) *p++ = '\\', *p++ = 'n'; else if (c == '\r') *p++ = '\\', *p++ = 'r'; -#ifndef PRINT_MULTIBYTE_STRING - else if (' ' <= c && c < 0x7f) - *p++ = c; - else { -#else - else if (_isprint(c)) - memcpy(p, scur, cr), p += cr; - else { -non_printable: cr = 1; c = *scur; -#endif - *p++ = '\\'; *p++ = 'x'; - *p++ = hexchars[(c >> 4) & 0x0f]; - *p++ = hexchars[c & 0x0f]; + else if (c < ' ' || c >= 0x7f) { + /* For performance, we don't want to call + PyOS_snprintf here (extra layers of + function call). */ + sprintf(p, "\\x%02x", c & 0xff); + p += 4; } + else + *p++ = c; } assert(newsize - (p - PyString_AS_STRING(v)) >= 1); *p++ = quote; diff --git a/configure b/configure index 517caab30ec..d9e98e07caa 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 1.355 . +# From configure.in Revision: 1.356 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.53. # @@ -901,7 +901,7 @@ esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` -ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` @@ -3888,7 +3888,6 @@ fi - for ac_header in dlfcn.h fcntl.h grp.h limits.h langinfo.h \ @@ -3896,7 +3895,7 @@ libintl.h locale.h ncurses.h poll.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h termios.h \ sys/audioio.h sys/file.h sys/lock.h sys/mkdev.h sys/modem.h \ sys/param.h sys/poll.h sys/select.h sys/socket.h sys/time.h sys/times.h \ -sys/un.h sys/utsname.h sys/wait.h pty.h term.h wctype.h libutil.h \ +sys/un.h sys/utsname.h sys/wait.h pty.h term.h libutil.h \ sys/resource.h netpacket/packet.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` @@ -11931,16 +11930,14 @@ echo "${ECHO_T}MACHDEP_OBJS" >&6 - - for ac_func in alarm chown chroot clock confstr ctermid ctermid_r execv \ fchdir flock fork fsync fdatasync fpathconf ftime ftruncate \ gai_strerror getgroups getlogin getpeername getpgid getpid getpwent getwd \ - hstrerror inet_pton iswprint kill killpg lchown link lstat mbtowc mkfifo \ - mknod mktime mremap nice pathconf pause plock poll pthread_init \ + hstrerror inet_pton kill killpg lchown link lstat mkfifo mknod mktime \ + mremap nice pathconf pause plock poll pthread_init \ putenv readlink \ select setegid seteuid setgid setgroups \ setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \ @@ -17175,7 +17172,7 @@ esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` -ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` diff --git a/configure.in b/configure.in index 94a0d1f59ab..21fc77c65e1 100644 --- a/configure.in +++ b/configure.in @@ -618,7 +618,7 @@ libintl.h locale.h ncurses.h poll.h pthread.h \ signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h termios.h \ sys/audioio.h sys/file.h sys/lock.h sys/mkdev.h sys/modem.h \ sys/param.h sys/poll.h sys/select.h sys/socket.h sys/time.h sys/times.h \ -sys/un.h sys/utsname.h sys/wait.h pty.h term.h wctype.h libutil.h \ +sys/un.h sys/utsname.h sys/wait.h pty.h term.h libutil.h \ sys/resource.h netpacket/packet.h) AC_HEADER_DIRENT AC_HEADER_MAJOR @@ -1680,8 +1680,8 @@ AC_MSG_RESULT(MACHDEP_OBJS) AC_CHECK_FUNCS(alarm chown chroot clock confstr ctermid ctermid_r execv \ fchdir flock fork fsync fdatasync fpathconf ftime ftruncate \ gai_strerror getgroups getlogin getpeername getpgid getpid getpwent getwd \ - hstrerror inet_pton iswprint kill killpg lchown link lstat mbtowc mkfifo \ - mknod mktime mremap nice pathconf pause plock poll pthread_init \ + hstrerror inet_pton kill killpg lchown link lstat mkfifo mknod mktime \ + mremap nice pathconf pause plock poll pthread_init \ putenv readlink \ select setegid seteuid setgid setgroups \ setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \ diff --git a/pyconfig.h.in b/pyconfig.h.in index 193a9caf341..01cced8084a 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -199,9 +199,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H -/* Define to 1 if you have the `iswprint' function. */ -#undef HAVE_ISWPRINT - /* Define to 1 if you have the `kill' function. */ #undef HAVE_KILL @@ -253,9 +250,6 @@ /* Define this if you have the makedev macro. */ #undef HAVE_MAKEDEV -/* Define to 1 if you have the `mbtowc' function. */ -#undef HAVE_MBTOWC - /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE @@ -595,9 +589,6 @@ /* Define if the compiler provides a wchar.h header file. */ #undef HAVE_WCHAR_H -/* Define to 1 if you have the header file. */ -#undef HAVE_WCTYPE_H - /* Define to 1 if you have the `_getpty' function. */ #undef HAVE__GETPTY