/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1996, by Sun Microsystems, Inc.
* All rights reserved.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
/*
*
* Wide I/O Library
*
* Copyright 1990, 1995 by Mortice Kern Systems Inc. All rights reserved.
*
*/
#if M_RCSID
#ifndef lint
#endif
#endif
#include <mks.h>
#include <errno.h>
#include <m_wio.h>
#ifdef M_I18N_LOCKING_SHIFT
/*
* Return non-zero if an error occured on the stream.
* The stream's input state is updated accordingly.
*
* NOTE this function assumes that the shift-in and
* shift-out are bytes.
*/
static int
{
char mb;
/* Was it an insignificant shift byte, SI-SI or SO-SO? */
/* First iteration will always enter here looking
* for a state change. Subsequent iterations entering
* here are trying to identify redundant shifts, which
* are SO-SI or SI-SO pairs.
*/
/* Convert byte and identify a state change. */
/* Encoding error or no state change. */
break;
}
}
}
return 0;
}
#endif /* M_I18N_LOCKING_SHIFT */
/*
* Return a wide character or WEOF for EOF or error.
*
* The function referenced by "get" is passed the pointer "object"
* and returns an input byte or EOF if no further data available.
*
* This mechanism is used to do conversions of byte strings or
* streams into wide characters without loss of information in the
* case of a bad multibyte character conversion. The bad multibyte
* sequence is passed through as individual bytes.
*/
{
int ch;
return -1;
}
/* Do still have bytes available? */
/* Read in enough bytes to convert a multibyte character. */
break;
/* Attempt to convert multibyte character sequence. */
);
#ifdef M_I18N_LOCKING_SHIFT
/* Only eat shift bytes within a line, since in line
* canonical mode, attempting to eat shift bytes
* following a <newline> causes another read().
*/
if (ch != '\n') {
/* When a valid character is found, consume
* any trailing shift-in or shift-out bytes,
* updating the state accordingly.
*/
(void) eat_shift_bytes(wio);
}
#endif /* M_I18N_LOCKING_SHIFT */
/* Remember the number of bytes converted. */
}
}
/* If we fill the multibyte character buffer or receive an
* EOF without recognising a multibyte character, then we
* will return individual bytes from the buffer. The buffer
* is restored to its state before the bogus byte sequence
* was read.
*/
}