You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.0 KiB
81 lines
2.0 KiB
/*
|
|
***********************************************************************
|
|
* © 2016 and later: Unicode, Inc. and others.
|
|
* License & terms of use: http://www.unicode.org/copyright.html
|
|
***********************************************************************
|
|
**********************************************************************
|
|
* Copyright (C) 1998-2001, International Business Machines Corporation
|
|
* and others. All Rights Reserved.
|
|
**********************************************************************
|
|
*
|
|
* File date.c
|
|
*
|
|
* Modification History:
|
|
*
|
|
* Date Name Description
|
|
* 06/14/99 stephen Creation.
|
|
*******************************************************************************
|
|
*/
|
|
|
|
#include "uprint.h"
|
|
#include <stdbool.h>
|
|
#include "unicode/ucnv.h"
|
|
#include "unicode/ustring.h"
|
|
|
|
#define BUF_SIZE 128
|
|
|
|
/* Print a ustring to the specified FILE* in the default codepage */
|
|
void
|
|
uprint(const UChar *s,
|
|
FILE *f,
|
|
UErrorCode *status)
|
|
{
|
|
/* converter */
|
|
UConverter *converter;
|
|
char buf [BUF_SIZE];
|
|
int32_t sourceLen;
|
|
const UChar *mySource;
|
|
const UChar *mySourceEnd;
|
|
char *myTarget;
|
|
int32_t arraySize;
|
|
|
|
if(s == 0) return;
|
|
|
|
/* set up the conversion parameters */
|
|
sourceLen = u_strlen(s);
|
|
mySource = s;
|
|
mySourceEnd = mySource + sourceLen;
|
|
myTarget = buf;
|
|
arraySize = BUF_SIZE;
|
|
|
|
/* open a default converter */
|
|
converter = ucnv_open(0, status);
|
|
|
|
/* if we failed, clean up and exit */
|
|
if(U_FAILURE(*status)) goto finish;
|
|
|
|
/* perform the conversion */
|
|
do {
|
|
/* reset the error code */
|
|
*status = U_ZERO_ERROR;
|
|
|
|
/* perform the conversion */
|
|
ucnv_fromUnicode(converter, &myTarget, myTarget + arraySize,
|
|
&mySource, mySourceEnd, NULL,
|
|
true, status);
|
|
|
|
/* Write the converted data to the FILE* */
|
|
fwrite(buf, sizeof(char), myTarget - buf, f);
|
|
|
|
/* update the conversion parameters*/
|
|
myTarget = buf;
|
|
arraySize = BUF_SIZE;
|
|
}
|
|
while(*status == U_BUFFER_OVERFLOW_ERROR);
|
|
|
|
finish:
|
|
|
|
/* close the converter */
|
|
ucnv_close(converter);
|
|
}
|