Date: Thu, 26 Jan 2006 06:00:46 GMT From: Alan Cox <alc@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 90389 for review Message-ID: <200601260600.k0Q60kkn032061@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=90389 Change 90389 by alc@alc_home on 2006/01/26 06:00:35 IFC @90388 Affected files ... .. //depot/projects/superpages/doc/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml#3 integrate .. //depot/projects/superpages/src/etc/services#2 integrate .. //depot/projects/superpages/src/include/printf.h#2 integrate .. //depot/projects/superpages/src/lib/Makefile#3 integrate .. //depot/projects/superpages/src/lib/libarchive/Makefile#5 integrate .. //depot/projects/superpages/src/lib/libarchive/archive_read_support_format_tp.c#2 integrate .. //depot/projects/superpages/src/lib/libc/gen/getttyent.c#2 integrate .. //depot/projects/superpages/src/lib/libc/stdio/Makefile.inc#3 integrate .. //depot/projects/superpages/src/lib/libc/stdio/xprintf.c#2 integrate .. //depot/projects/superpages/src/lib/libc/stdio/xprintf_errno.c#1 branch .. //depot/projects/superpages/src/lib/libc/stdio/xprintf_quote.c#1 branch .. //depot/projects/superpages/src/lib/libc/stdio/xprintf_vis.c#2 integrate .. //depot/projects/superpages/src/lib/libc/stdlib/grantpt.c#2 integrate .. //depot/projects/superpages/src/lib/libc/stdlib/malloc.c#3 integrate .. //depot/projects/superpages/src/lib/libdisk/disk.c#2 integrate .. //depot/projects/superpages/src/lib/libdisk/libdisk.h#2 integrate .. //depot/projects/superpages/src/lib/libdisk/write_arm_disk.c#1 branch .. //depot/projects/superpages/src/lib/libgssapi/gss_accept_sec_context.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_acquire_cred.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_add_cred.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_add_oid_set_member.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_canonicalize_name.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_compare_name.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_context_time.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_create_empty_oid_set.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_delete_sec_context.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_display_name.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_display_status.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_duplicate_name.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_export_name.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_export_sec_context.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_get_mic.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_import_name.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_import_sec_context.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_indicate_mechs.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_init_sec_context.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_inquire_context.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_inquire_cred.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_inquire_cred_by_mech.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_inquire_mechs_for_name.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_inquire_names_for_mech.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_process_context_token.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_release_buffer.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_release_cred.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_release_name.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_release_oid_set.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_test_oid_set_member.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_unwrap.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_verify_mic.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_wrap.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gss_wrap_size_limit.3#2 integrate .. //depot/projects/superpages/src/lib/libgssapi/gssapi.3#2 integrate .. //depot/projects/superpages/src/lib/libutil/pty.c#2 integrate .. //depot/projects/superpages/src/release/doc/en_US.ISO8859-1/hardware/common/dev.sgml#4 integrate .. //depot/projects/superpages/src/release/doc/share/misc/dev.archlist.txt#4 integrate .. //depot/projects/superpages/src/sbin/rcorder/Makefile#2 integrate .. //depot/projects/superpages/src/share/man/man4/ata.4#4 integrate .. //depot/projects/superpages/src/share/man/man4/pcm.4#4 integrate .. //depot/projects/superpages/src/share/man/man4/pty.4#2 integrate .. //depot/projects/superpages/src/sys/cam/scsi/scsi_da.c#3 integrate .. //depot/projects/superpages/src/sys/compat/linux/linux_ioctl.c#3 integrate .. //depot/projects/superpages/src/sys/compat/linux/linux_ioctl.h#2 integrate .. //depot/projects/superpages/src/sys/compat/linux/linux_stats.c#2 integrate .. //depot/projects/superpages/src/sys/conf/files#7 integrate .. //depot/projects/superpages/src/sys/dev/ata/ata-chipset.c#4 integrate .. //depot/projects/superpages/src/sys/dev/ata/ata-pci.c#4 integrate .. //depot/projects/superpages/src/sys/dev/ata/ata-pci.h#4 integrate .. //depot/projects/superpages/src/sys/dev/isp/isp_pci.c#3 integrate .. //depot/projects/superpages/src/sys/dev/rp/rp_pci.c#3 integrate .. //depot/projects/superpages/src/sys/dev/sound/pcm/dsp.c#4 integrate .. //depot/projects/superpages/src/sys/dev/sound/pcm/feeder_fmt.c#3 integrate .. //depot/projects/superpages/src/sys/dev/sound/pcm/feeder_rate.c#4 integrate .. //depot/projects/superpages/src/sys/dev/usb/umass.c#3 integrate .. //depot/projects/superpages/src/sys/dev/usb/usbdevs#3 integrate .. //depot/projects/superpages/src/sys/kern/kern_ktr.c#2 integrate .. //depot/projects/superpages/src/sys/kern/kern_resource.c#3 integrate .. //depot/projects/superpages/src/sys/kern/kern_sysctl.c#2 integrate .. //depot/projects/superpages/src/sys/kern/subr_witness.c#4 integrate .. //depot/projects/superpages/src/sys/kern/tty_pts.c#1 branch .. //depot/projects/superpages/src/sys/kern/tty_pty.c#3 integrate .. //depot/projects/superpages/src/sys/modules/amr/Makefile#2 integrate .. //depot/projects/superpages/src/sys/net/if_bridge.c#6 integrate .. //depot/projects/superpages/src/sys/netinet6/ip6_input.c#3 integrate .. //depot/projects/superpages/src/sys/sys/ktr.h#3 integrate .. //depot/projects/superpages/src/sys/sys/ttycom.h#2 integrate .. //depot/projects/superpages/src/sys/vm/vm_contig.c#4 integrate .. //depot/projects/superpages/src/sys/vm/vm_object.c#5 integrate .. //depot/projects/superpages/src/tools/tools/mfc/mfc.pl#2 integrate .. //depot/projects/superpages/www/en/donations/wantlist.sgml#6 integrate .. //depot/projects/superpages/www/en/platforms/arm.sgml#3 integrate .. //depot/projects/superpages/www/en/platforms/index.sgml#4 integrate .. //depot/projects/superpages/www/en/releases/5.4R/errata.html#3 integrate .. //depot/projects/superpages/www/en/releases/5.5R/Makefile#1 branch .. //depot/projects/superpages/www/en/releases/5.5R/approvals.sgml#1 branch .. //depot/projects/superpages/www/en/releases/5.5R/todo.sgml#1 branch .. //depot/projects/superpages/www/en/releases/6.0R/errata.html#2 integrate .. //depot/projects/superpages/www/en/releases/6.1R/Makefile#1 branch .. //depot/projects/superpages/www/en/releases/6.1R/approvals.sgml#1 branch .. //depot/projects/superpages/www/en/releases/6.1R/stress.xsl#1 branch .. //depot/projects/superpages/www/en/releases/6.1R/todo.sgml#1 branch .. //depot/projects/superpages/www/en/releases/Makefile#2 integrate .. //depot/projects/superpages/www/share/sgml/advisories.xml#4 integrate Differences ... ==== //depot/projects/superpages/doc/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml#3 (text+ko) ==== @@ -1,7 +1,7 @@ <!-- The FreeBSD Documentation Project - $FreeBSD: doc/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml,v 1.404 2006/01/21 09:35:38 blackend Exp $ + $FreeBSD: doc/en_US.ISO8859-1/books/handbook/mirrors/chapter.sgml,v 1.405 2006/01/26 02:56:13 brd Exp $ --> <appendix id="mirrors"> @@ -387,16 +387,8 @@ (Use <command>cvs login</command> and enter the password <quote>anoncvs</quote> when prompted.)</para> </listitem> + <!-- anoncvs.FreeBSD.org is sufferring hardware troubles at the moment ... <listitem> - <para><emphasis>Sweden</emphasis>: - freebsdanoncvs@anoncvs.se.FreeBSD.org:/home/ncvs - (ssh only - no password)</para> - - <programlisting>SSH HostKey: 1024 a7:34:15:ee:0e:c6:65:cf:40:78:2d:f3:cd:87:bd:a6 root@apelsin.fruitsalad.org -SSH2 HostKey: 1024 21:df:04:03:c7:26:3e:e8:36:1a:50:2d:c7:ae:b8:5f ssh_host_dsa_key.pub</programlisting> - - </listitem> - <listitem> <para><emphasis>USA</emphasis>: freebsdanoncvs@anoncvs.FreeBSD.org:/home/ncvs (ssh only - no password)</para> @@ -405,6 +397,7 @@ SSH2 HostKey: 1024 52:02:38:1a:2f:a8:71:d3:f5:83:93:8d:aa:00:6f:65 ssh_host_dsa_key.pub</programlisting> </listitem> + --> <listitem> <para><emphasis>USA</emphasis>: anoncvs@anoncvs1.FreeBSD.org:/home/ncvs (ssh only - no ==== //depot/projects/superpages/src/etc/services#2 (text+ko) ==== @@ -16,7 +16,7 @@ # Kerberos services are for Kerberos v4, and are unofficial. Sites running # v5 should uncomment v5 entries and comment v4 entries. # -# $FreeBSD: src/etc/services,v 1.102 2004/08/16 11:52:22 cperciva Exp $ +# $FreeBSD: src/etc/services,v 1.103 2006/01/25 17:37:15 maxim Exp $ # From: @(#)services 5.8 (Berkeley) 5/9/91 # # WELL KNOWN PORT NUMBERS @@ -1917,6 +1917,8 @@ eppc 3031/udp #Remote AppleEvents/PPC Toolbox NSWS 3049/tcp NSWS 3049/udp +gds_db 3050/tcp #InterBase Database Remote Protocol +gds_db 3050/udp #InterBase Database Remote Protocol sj3 3086/tcp #SJ3 (kanji input) vmodem 3141/tcp vmodem 3141/udp ==== //depot/projects/superpages/src/include/printf.h#2 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/include/printf.h,v 1.1 2005/12/16 18:56:38 phk Exp $ + * $FreeBSD: src/include/printf.h,v 1.2 2006/01/25 12:45:24 phk Exp $ */ #ifndef _PRINTF_H_ @@ -124,16 +124,28 @@ int register_printf_render(int spec, printf_render *render, printf_arginfo_function *arginfo); int register_printf_render_std(const unsigned char *specs); +/* vprintf_errno.c */ +printf_arginfo_function __printf_arginfo_errno; +printf_render __printf_render_errno; + /* vprintf_float.c */ printf_arginfo_function __printf_arginfo_float; printf_render __printf_render_float; +/* vprintf_hexdump.c */ +printf_arginfo_function __printf_arginfo_hexdump; +printf_render __printf_render_hexdump; + /* vprintf_int.c */ printf_arginfo_function __printf_arginfo_ptr; printf_arginfo_function __printf_arginfo_int; printf_render __printf_render_ptr; printf_render __printf_render_int; +/* vprintf_quoute.c */ +printf_arginfo_function __printf_arginfo_quote; +printf_render __printf_render_quote; + /* vprintf_str.c */ printf_arginfo_function __printf_arginfo_chr; printf_render __printf_render_chr; @@ -144,10 +156,6 @@ printf_arginfo_function __printf_arginfo_time; printf_render __printf_render_time; -/* vprintf_hexdump.c */ -printf_arginfo_function __printf_arginfo_hexdump; -printf_render __printf_render_hexdump; - /* vprintf_vis.c */ printf_arginfo_function __printf_arginfo_vis; printf_render __printf_render_vis; ==== //depot/projects/superpages/src/lib/Makefile#3 (text+ko) ==== @@ -1,5 +1,5 @@ # @(#)Makefile 8.1 (Berkeley) 6/4/93 -# $FreeBSD: src/lib/Makefile,v 1.209 2005/12/29 14:40:20 dfr Exp $ +# $FreeBSD: src/lib/Makefile,v 1.210 2006/01/25 11:24:37 cognet Exp $ # To satisfy shared library or ELF linkage when only the libraries being # built are visible: @@ -26,7 +26,7 @@ libnetgraph libradius librpcsvc libsbuf libtacplus libutil \ ${_libypclnt} libalias libarchive ${_libatm} \ libbegemot ${_libbluetooth} libbsnmp libbz2 libc ${_libc_r} \ - libcalendar libcam libcompat libdevinfo libdevstat ${_libdisk} \ + libcalendar libcam libcompat libdevinfo libdevstat libdisk \ libedit libexpat libfetch libform libftpio libgeom ${_libgpib} \ libgssapi ${_libio} libipsec \ libipx libkiconv libmagic libmemstat libmenu ${_libmilter} ${_libmp} \ @@ -68,10 +68,6 @@ _libc_r= .endif -.if ${MACHINE_ARCH} != "arm" -_libdisk= libdisk -.endif - .if ${MACHINE_ARCH} == "alpha" _libio= libio .endif ==== //depot/projects/superpages/src/lib/libarchive/Makefile#5 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/lib/libarchive/Makefile,v 1.44 2006/01/18 06:26:42 kientzle Exp $ +# $FreeBSD: src/lib/libarchive/Makefile,v 1.45 2006/01/26 05:28:56 kientzle Exp $ # This Makefile is for use with the FreeBSD buid system. For # non-FreeBSD systems, you should first "make distfile" on FreeBSD, @@ -68,6 +68,7 @@ archive_read_support_format_cpio.c \ archive_read_support_format_iso9660.c \ archive_read_support_format_tar.c \ + archive_read_support_format_tp.c \ archive_read_support_format_zip.c \ archive_string.c \ archive_string_sprintf.c \ ==== //depot/projects/superpages/src/lib/libarchive/archive_read_support_format_tp.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include "archive_platform.h" -__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_support_format_tp.c,v 1.1 2006/01/17 03:40:42 kientzle Exp $"); +__FBSDID("$FreeBSD: src/lib/libarchive/archive_read_support_format_tp.c,v 1.2 2006/01/26 05:28:56 kientzle Exp $"); #include <sys/stat.h> @@ -274,6 +274,7 @@ struct stat st; struct tp *tp; struct file_info *file; + const void *v; const char *p; ssize_t bytes_read; int r; @@ -283,8 +284,7 @@ /* Read the entire TOC first. */ if (!tp->toc_read) { /* Skip the initial block. */ - bytes_read = (a->compression_read_ahead)(a, - (const void **)&p, 512); + bytes_read = (a->compression_read_ahead)(a, &v, 512); if (bytes_read < 512) return (ARCHIVE_FATAL); bytes_read = 512; @@ -294,12 +294,13 @@ /* Consume TOC entries. */ do { bytes_read = (a->compression_read_ahead)(a, - (const void **)&p, tp->toc_size); + &v, tp->toc_size); if (bytes_read < tp->toc_size) return (ARCHIVE_FATAL); bytes_read = tp->toc_size; tp->current_position += bytes_read; (a->compression_read_consume)(a, bytes_read); + p = (const char *)v; file = (*tp->parse_file_info)(a, p); if (file != NULL) add_entry(tp, file); ==== //depot/projects/superpages/src/lib/libc/gen/getttyent.c#2 (text+ko) ==== @@ -35,19 +35,25 @@ static char sccsid[] = "@(#)getttyent.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/lib/libc/gen/getttyent.c,v 1.13 2005/07/25 17:57:15 mdodd Exp $"); +__FBSDID("$FreeBSD: src/lib/libc/gen/getttyent.c,v 1.14 2006/01/26 01:34:26 cognet Exp $"); #include <ttyent.h> #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> +#include <dirent.h> +#include <paths.h> static char zapchar; static FILE *tf; +static int maxpts = 0; +static int curpts = 0; +static int pts_valid = 0; static size_t lbsize; static char *line; +#define PTS "pts/" #define MALLOCCHUNK 100 static char *skip(char *); @@ -73,6 +79,7 @@ getttyent() { static struct ttyent tty; + static char devpts_name[] = "pts/4294967295"; char *p; int c; size_t i; @@ -80,8 +87,19 @@ if (!tf && !setttyent()) return (NULL); for (;;) { - if (!fgets(p = line, lbsize, tf)) + if (!fgets(p = line, lbsize, tf)) { + if (pts_valid == 1 && curpts <= maxpts) { + sprintf(devpts_name, "pts/%d", curpts++); + tty.ty_name = devpts_name; + tty.ty_getty = tty.ty_type = NULL; + tty.ty_status = TTY_NETWORK; + tty.ty_window = NULL; + tty.ty_comment = NULL; + tty.ty_group = _TTYS_NOGROUP; + return (&tty); + } return (NULL); + } /* extend buffer if line was too big, and retry */ while (!index(p, '\n')) { i = strlen(p); @@ -209,12 +227,30 @@ int setttyent() { + DIR *devpts_dir; if (line == NULL) { if ((line = malloc(MALLOCCHUNK)) == NULL) return (0); lbsize = MALLOCCHUNK; } + devpts_dir = opendir(_PATH_DEV PTS); + if (devpts_dir) { + struct dirent *dp; + + while ((dp = readdir(devpts_dir))) { + if (strcmp(dp->d_name, ".") != 0 && + strcmp(dp->d_name, "..") != 0) { + if (atoi(dp->d_name) > maxpts) { + maxpts = atoi(dp->d_name); + pts_valid = 1; + curpts = 0; + } + } + } + closedir(devpts_dir); + } + printf("it is %d %d\n", maxpts, curpts); if (tf) { rewind(tf); return (1); @@ -228,6 +264,7 @@ { int rval; + pts_valid = 0; /* * NB: Don't free `line' because getttynam() * may still be referencing it ==== //depot/projects/superpages/src/lib/libc/stdio/Makefile.inc#3 (text+ko) ==== @@ -1,5 +1,5 @@ # @(#)Makefile.inc 8.3 (Berkeley) 4/17/94 -# $FreeBSD: src/lib/libc/stdio/Makefile.inc,v 1.34 2005/12/16 18:56:38 phk Exp $ +# $FreeBSD: src/lib/libc/stdio/Makefile.inc,v 1.35 2006/01/25 12:45:24 phk Exp $ # stdio sources .PATH: ${.CURDIR}/stdio @@ -24,7 +24,8 @@ wsetup.c SRCS+= xprintf.c xprintf_float.c xprintf_int.c xprintf_str.c -SRCS+= xprintf_hexdump.c xprintf_time.c xprintf_vis.c +SRCS+= xprintf_errno.c xprintf_hexdump.c xprintf_quote.c +SRCS+= xprintf_time.c xprintf_vis.c MAN+= fclose.3 ferror.3 fflush.3 fgetln.3 fgets.3 fgetwln.3 fgetws.3 \ flockfile.3 \ ==== //depot/projects/superpages/src/lib/libc/stdio/xprintf.c#2 (text+ko) ==== @@ -30,7 +30,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/lib/libc/stdio/xprintf.c,v 1.1 2005/12/16 18:56:38 phk Exp $ + * $FreeBSD: src/lib/libc/stdio/xprintf.c,v 1.2 2006/01/25 12:45:24 phk Exp $ */ #include <namespace.h> @@ -655,6 +655,16 @@ __printf_render_hexdump, __printf_arginfo_hexdump); break; + case 'M': + register_printf_render(*specs, + __printf_render_errno, + __printf_arginfo_errno); + break; + case 'Q': + register_printf_render(*specs, + __printf_render_quote, + __printf_arginfo_quote); + break; case 'T': register_printf_render(*specs, __printf_render_time, ==== //depot/projects/superpages/src/lib/libc/stdio/xprintf_vis.c#2 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/lib/libc/stdio/xprintf_vis.c,v 1.1 2005/12/16 18:56:39 phk Exp $ + * $FreeBSD: src/lib/libc/stdio/xprintf_vis.c,v 1.2 2006/01/25 12:45:24 phk Exp $ */ #include <namespace.h> @@ -54,6 +54,8 @@ ret = 0; p = *((char **)arg[0]); + if (p == NULL) + return (__printf_out(io, pi, "(null)", 6)); if (pi->prec >= 0) l = pi->prec; else ==== //depot/projects/superpages/src/lib/libc/stdlib/grantpt.c#2 (text+ko) ==== @@ -32,7 +32,7 @@ #include <sys/cdefs.h> #ifndef lint -__FBSDID("$FreeBSD: src/lib/libc/stdlib/grantpt.c,v 1.4 2005/07/07 17:48:40 marcus Exp $"); +__FBSDID("$FreeBSD: src/lib/libc/stdlib/grantpt.c,v 1.5 2006/01/26 01:33:55 cognet Exp $"); #endif /* not lint */ #include "namespace.h" @@ -41,6 +41,8 @@ #include <sys/wait.h> #include <sys/time.h> #include <sys/resource.h> +#include <sys/sysctl.h> +#include <sys/ioctl.h> #include <errno.h> #include <fcntl.h> @@ -56,6 +58,8 @@ #define PTM_PREFIX "pty" /* pseudo tty master naming convention */ #define PTS_PREFIX "tty" /* pseudo tty slave naming convention */ +#define NEWPTS_PREFIX "pts/" +#define PTMX "ptmx" /* * The following are range values for pseudo TTY devices. Pseudo TTYs have a @@ -78,6 +82,29 @@ minor((x).st_rdev) >= 0 && \ minor((x).st_rdev) < PT_MAX) + +static int +is_pts(int fd) +{ + int nb; + + return (_ioctl(fd, TIOCGPTN, &nb) == 0); +} + +int +__use_pts(void) +{ + int use_pts; + size_t len; + int error; + + len = sizeof(use_pts); + error = sysctlbyname("kern.pts.enable", &use_pts, &len, NULL, 0); + if (error) + return (0); + return (use_pts); +} + /* * grantpt(): grant ownership of a slave pseudo-terminal device to the * current user. @@ -180,6 +207,10 @@ if (oflag & ~(O_RDWR | O_NOCTTY)) errno = EINVAL; else { + if (__use_pts()) { + fildes = _open(_PATH_DEV PTMX, oflag); + return (fildes); + } mc1 = master + strlen(_PATH_DEV PTM_PREFIX); mc2 = mc1 + 1; @@ -214,6 +245,7 @@ ptsname(int fildes) { static char slave[] = _PATH_DEV PTS_PREFIX "XY"; + static char new_slave[] = _PATH_DEV NEWPTS_PREFIX "4294967295"; char *retval; struct stat sbuf; @@ -223,11 +255,19 @@ if (!ISPTM(sbuf)) errno = EINVAL; else { - (void)snprintf(slave, sizeof(slave), - _PATH_DEV PTS_PREFIX "%s", - devname(sbuf.st_rdev, S_IFCHR) + - strlen(PTM_PREFIX)); - retval = slave; + if (!is_pts(fildes)) { + (void)snprintf(slave, sizeof(slave), + _PATH_DEV PTS_PREFIX "%s", + devname(sbuf.st_rdev, S_IFCHR) + + strlen(PTM_PREFIX)); + retval = slave; + } else { + (void)snprintf(new_slave, sizeof(new_slave), + _PATH_DEV NEWPTS_PREFIX "%s", + devname(sbuf.st_rdev, S_IFCHR) + + strlen(PTM_PREFIX)); + retval = new_slave; + } } } ==== //depot/projects/superpages/src/lib/libc/stdlib/malloc.c#3 (text+ko) ==== @@ -136,7 +136,7 @@ #define MALLOC_DEBUG #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/lib/libc/stdlib/malloc.c,v 1.103 2006/01/23 03:32:38 jasone Exp $"); +__FBSDID("$FreeBSD: src/lib/libc/stdlib/malloc.c,v 1.105 2006/01/25 05:41:02 jasone Exp $"); #include "libc_private.h" #ifdef MALLOC_DEBUG @@ -303,12 +303,6 @@ */ uint64_t nfit; - /* - * Number of allocation requests that were successfully serviced by this - * bin, but that a smaller bin could have serviced. - */ - uint64_t noverfit; - /* High-water marks for this bin. */ unsigned long highcached; @@ -837,6 +831,7 @@ static void arena_large_cache(arena_t *arena, region_t *reg, bool lru); static void arena_lru_cache(arena_t *arena, region_t *reg); static void arena_delay_cache(arena_t *arena, region_t *reg); +static region_t *arena_frag_reg_alloc(arena_t *arena, size_t size, bool fit); static region_t *arena_split_reg_alloc(arena_t *arena, size_t size, bool fit); static void arena_reg_fit(arena_t *arena, size_t size, region_t *reg, bool restore_split); @@ -1190,7 +1185,6 @@ stats_arenas->bins[i].nrequests += arena->stats.bins[i].nrequests; stats_arenas->bins[i].nfit += arena->stats.bins[i].nfit; - stats_arenas->bins[i].noverfit += arena->stats.bins[i].noverfit; if (arena->stats.bins[i].highcached > stats_arenas->bins[i].highcached) { stats_arenas->bins[i].highcached @@ -1238,14 +1232,13 @@ stats_arenas->frag.nrequests, stats_arenas->frag.nserviced); malloc_printf("bins:\n"); - malloc_printf(" %4s%7s%13s%13s%13s%11s\n", "bin", - "size", "nrequests", "nfit", "noverfit", "highcached"); + malloc_printf(" %4s%7s%13s%13s%11s\n", "bin", + "size", "nrequests", "nfit", "highcached"); for (i = 0; i < NBINS; i++) { malloc_printf( - " %4u%7u%13llu%13llu%13llu%11lu\n", + " %4u%7u%13llu%13llu%11lu\n", i, ((i + bin_shift) << opt_quantum_2pow), stats_arenas->bins[i].nrequests, stats_arenas->bins[i].nfit, - stats_arenas->bins[i].noverfit, stats_arenas->bins[i].highcached); } @@ -1656,12 +1649,6 @@ if (bit != 0) { /* Usable allocation found. */ ret = (i * (sizeof(int) << 3)) + bit - 1; -#ifdef MALLOC_STATS - if (ret == minbin) - arena->stats.bins[minbin].nfit++; - else - arena->stats.bins[ret].noverfit++; -#endif goto RETURN; } } @@ -1765,7 +1752,7 @@ } } -/* Try to coalesce reg with its neighbors. Return NULL if coalescing fails. */ +/* Try to coalesce reg with its neighbors. Return false if coalescing fails. */ static bool arena_coalesce(arena_t *arena, region_t **reg, size_t size) { @@ -2134,6 +2121,16 @@ ret = qr_next(&tbin->regions, next.u.s.link); assert(region_next_size_get(&ret->sep) == ((bin + bin_shift) << opt_quantum_2pow)); + if (region_next_free_get(&ret->sep) == false) { + /* + * Use delayed regions in LIFO order, in order to increase + * locality of use, and thereby (hopefully) reduce + * fragmentation. + */ + ret = qr_prev(&tbin->regions, next.u.s.link); + assert(region_next_size_get(&ret->sep) + == ((bin + bin_shift) << opt_quantum_2pow)); + } qr_remove(ret, next.u.s.link); #ifdef MALLOC_STATS arena->stats.bins[bin].nregions--; @@ -2263,6 +2260,7 @@ >= QUANTUM_CEILING(sizeof(region_small_sizer_t))); size = region_next_size_get(®->sep); + assert(arena_coalesce(arena, ®, size) == false); if (size <= bin_maxsize) { arena_bin_append(arena, (size >> opt_quantum_2pow) - bin_shift, reg); @@ -2289,6 +2287,7 @@ assert(region_next_size_get(®->sep) >= QUANTUM_CEILING(sizeof(region_small_sizer_t))); assert(size == region_next_size_get(®->sep)); + assert(arena_coalesce(arena, ®, size) == false); if (size <= bin_maxsize) { arena_bin_push(arena, (size >> opt_quantum_2pow) - bin_shift, @@ -2431,16 +2430,48 @@ } } -static __inline region_t * +static region_t * arena_frag_reg_alloc(arena_t *arena, size_t size, bool fit) { region_t *ret; + size_t total_size +#ifdef MALLOC_DEBUG + = 0 /* for assert() below. */ +#endif + ; + bool refill; + /* + * Clear frag if it is too small to carve a maximally sized small + * region from. + */ + if (arena->frag != NULL) { + if ((total_size = region_next_size_get(&arena->frag->sep)) + < size && size <= bin_maxsize) { + region_t *reg; + + reg = arena->frag; + region_next_contig_set(®->sep); + + arena->frag = NULL; + + arena_delay_cache(arena, reg); + refill = true; + } else { + /* + * No need to refill. Note that total_size was set + * above. + */ + refill = false; + } + } else + refill = true; + /* * Try to fill frag if it's empty. Frag needs to be marked as * allocated. */ - if (arena->frag == NULL) { + if (refill) { region_node_t *node; node = RB_MIN(region_tree_s, &arena->large_regions); @@ -2456,101 +2487,109 @@ assert(region_next_free_get(&frag->sep)); region_next_free_unset(&frag->sep); - next = (region_t *)&((char *)frag)[region_next_size_get( - &frag->sep)]; + total_size = region_next_size_get(&frag->sep); + next = (region_t *)&((char *)frag)[total_size]; assert(region_prev_free_get(&next->sep)); region_prev_free_unset(&next->sep); arena->frag = frag; + } else { + unsigned bin; + + /* Look in bins for a large enough region. */ + if ((bin = arena_bins_search(arena, size)) + != UINT_MAX) { + /* Use the smallest available region. */ + arena->frag = arena_bin_pop(arena, bin); +#ifdef MALLOC_STATS + arena->stats.frag.ncached++; +#endif + total_size = + region_next_size_get(&arena->frag->sep); + assert(total_size >= size); + } else { + /* Unable to fill frag. */ + return (NULL); + } } } + assert(arena->frag != NULL); + /* total_size has been set in all possible paths that lead to here. */ + assert(total_size != 0); - if (arena->frag != NULL) { #ifdef MALLOC_STATS - arena->stats.frag.nrequests++; + arena->stats.frag.nrequests++; #endif - if (region_next_size_get(&arena->frag->sep) >= size) { - if (fit) { - size_t total_size; + if (total_size < size) { + /* + * Frag isn't large enough to service this request. Note that + * this is only possible for a large request, since the refill + * code always makes sure to refill frag if it's too small to + * service a current small request. + */ + assert(size > bin_maxsize); + return (NULL); + } - /* - * Use frag, but try to use the beginning for - * smaller regions, and the end for larger - * regions. This reduces fragmentation in some - * pathological use cases. It tends to group - * short-lived (smaller) regions, which - * increases the effectiveness of coalescing. - */ + if (fit) { + /* + * Use frag, but try to use the beginning for smaller regions, + * and the end for larger regions. This reduces fragmentation + * in some pathological use cases. It tends to group + * short-lived (smaller) regions, which increases the + * effectiveness of coalescing. + */ - total_size = - region_next_size_get(&arena->frag->sep); - assert(size % quantum == 0); + assert(size % quantum == 0); - if (total_size - size >= QUANTUM_CEILING( - sizeof(region_small_sizer_t))) { - if (size <= bin_maxsize) { - region_t *next; + if (total_size - size >= + QUANTUM_CEILING(sizeof(region_small_sizer_t))) { + if (size <= bin_maxsize) { + region_t *next; - /* - * Carve space from the - * beginning of frag. - */ + /* Carve space from the beginning of frag. */ - /* ret. */ - ret = arena->frag; - region_next_size_set(&ret->sep, - size); - assert(region_next_free_get( - &ret->sep) == false); + /* ret. */ + ret = arena->frag; + region_next_size_set(&ret->sep, size); + assert(region_next_free_get(&ret->sep) + == false); - /* next. */ - next = (region_t *)&((char *) - ret)[size]; - region_next_size_set(&next->sep, - total_size - size); - assert(size >= - QUANTUM_CEILING(sizeof( - region_small_sizer_t))); - region_prev_free_unset( - &next->sep); - region_next_free_unset( - &next->sep); + /* next. */ + next = (region_t *)&((char *)ret)[size]; + region_next_size_set(&next->sep, + total_size - size); + assert(size >= QUANTUM_CEILING(sizeof( + region_small_sizer_t))); + region_prev_free_unset(&next->sep); + region_next_free_unset(&next->sep); - /* Update frag. */ - arena->frag = next; - } else { - region_t *prev; - size_t prev_size; + /* Update frag. */ + arena->frag = next; + } else { + region_t *prev; + size_t prev_size; - /* - * Carve space from the end of - * frag. - */ + /* Carve space from the end of frag. */ - /* prev. */ - prev_size = total_size - size; - prev = arena->frag; - region_next_size_set(&prev->sep, - prev_size); - assert(prev_size >= - QUANTUM_CEILING(sizeof( - region_small_sizer_t))); - assert(region_next_free_get( - &prev->sep) == false); + /* prev. */ + prev_size = total_size - size; + prev = arena->frag; + region_next_size_set(&prev->sep, prev_size); + assert(prev_size >= QUANTUM_CEILING(sizeof( + region_small_sizer_t))); + assert(region_next_free_get(&prev->sep) + == false); - /* ret. */ - ret = (region_t *)&((char *) - prev)[prev_size]; - region_next_size_set(&ret->sep, - size); - region_prev_free_unset( - &ret->sep); - region_next_free_unset( - &ret->sep); + /* ret. */ + ret = (region_t *)&((char *)prev)[prev_size]; + region_next_size_set(&ret->sep, size); + region_prev_free_unset(&ret->sep); + region_next_free_unset(&ret->sep); #ifdef MALLOC_DEBUG - { + { region_t *next; /* next. */ @@ -2558,83 +2597,57 @@ [region_next_size_get(&ret->sep)]; assert(region_prev_free_get(&next->sep) == false); - } + } #endif - } + } #ifdef MALLOC_STATS - arena->stats.nsplit++; + arena->stats.nsplit++; #endif - } else { - /* - * frag is close enough to the right - * size that there isn't enough room to - * create a neighboring region. - */ + } else { + /* + * Frag is close enough to the right size that there + * isn't enough room to create a neighboring region. + */ - /* ret. */ - ret = arena->frag; - arena->frag = NULL; - assert(region_next_free_get(&ret->sep) - == false); + /* ret. */ + ret = arena->frag; + arena->frag = NULL; + assert(region_next_free_get(&ret->sep) == false); #ifdef MALLOC_DEBUG - { - region_t *next; + { + region_t *next; - /* next. */ - next = (region_t *)&((char *) - ret)[region_next_size_get( - &ret->sep)]; - assert(region_prev_free_get( - &next->sep) == false); - } + /* next. */ + next = (region_t *)&((char *)ret)[total_size]; + assert(region_prev_free_get(&next->sep) + == false); + } #endif - } + } #ifdef MALLOC_STATS - arena->stats.frag.nserviced++; + arena->stats.frag.nserviced++; #endif - } else { - /* Don't fit to the allocation size. */ + } else { + /* Don't fit to the allocation size. */ - /* ret. */ - ret = arena->frag; >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200601260600.k0Q60kkn032061>