1/* 2*********************************************************************** 3* © 2016 and later: Unicode, Inc. and others. 4* License & terms of use: http://www.unicode.org/copyright.html#License 5*********************************************************************** 6********************************************************************** 7* Copyright (C) 1998-2001, International Business Machines Corporation 8* and others. All Rights Reserved. 9********************************************************************** 10* 11* File date.c 12* 13* Modification History: 14* 15* Date Name Description 16* 06/14/99 stephen Creation. 17******************************************************************************* 18*/ 19 20#include "uprint.h" 21#include "unicode/ucnv.h" 22#include "unicode/ustring.h" 23 24#define BUF_SIZE 128 25 26/* Print a ustring to the specified FILE* in the default codepage */ 27void 28uprint(const UChar *s, 29 FILE *f, 30 UErrorCode *status) 31{ 32 /* converter */ 33 UConverter *converter; 34 char buf [BUF_SIZE]; 35 int32_t sourceLen; 36 const UChar *mySource; 37 const UChar *mySourceEnd; 38 char *myTarget; 39 int32_t arraySize; 40 41 if(s == 0) return; 42 43 /* set up the conversion parameters */ 44 sourceLen = u_strlen(s); 45 mySource = s; 46 mySourceEnd = mySource + sourceLen; 47 myTarget = buf; 48 arraySize = BUF_SIZE; 49 50 /* open a default converter */ 51 converter = ucnv_open(0, status); 52 53 /* if we failed, clean up and exit */ 54 if(U_FAILURE(*status)) goto finish; 55 56 /* perform the conversion */ 57 do { 58 /* reset the error code */ 59 *status = U_ZERO_ERROR; 60 61 /* perform the conversion */ 62 ucnv_fromUnicode(converter, &myTarget, myTarget + arraySize, 63 &mySource, mySourceEnd, NULL, 64 TRUE, status); 65 66 /* Write the converted data to the FILE* */ 67 fwrite(buf, sizeof(char), myTarget - buf, f); 68 69 /* update the conversion parameters*/ 70 myTarget = buf; 71 arraySize = BUF_SIZE; 72 } 73 while(*status == U_BUFFER_OVERFLOW_ERROR); 74 75 finish: 76 77 /* close the converter */ 78 ucnv_close(converter); 79} 80