| /* | |
| *********************************************************************** | |
| * © 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); | |
| } |