src/utf8.c File Reference

#include <stdio.h>
#include <string.h>

Include dependency graph for utf8.c:

Go to the source code of this file.

Functions

int utf8_test_valid (const unsigned char *input, const unsigned int length)
 main ()

Variables

char * testStrings []


Function Documentation

main ( void   ) 

Definition at line 186 of file utf8.c.

References hellow(), LARGE_NUMBER, muxevent_add_simple_arg, muxevent_initialize(), muxevent_run(), SIMULTANEOUS_EVENTS, TEST_ITERATIONS, testStrings, and utf8_test_valid().

00187 {
00188         int i, length;
00189         for(i = 0; i < sizeof(testStrings) && testStrings[i] != NULL; i++) {
00190                 printf(" %d = %d\n", i,
00191                            utf8_test_valid(testStrings[i], strlen(testStrings[i])));
00192         }
00193 }

int utf8_test_valid ( const unsigned char *  input,
const unsigned int  length 
)

Definition at line 91 of file utf8.c.

Referenced by main().

00092 {
00093         int current, remaining;
00094         unsigned char mbhead;
00095 
00096         for(current = 0; current < length; current++) {
00097                 remaining = length - (current + 1);
00098                 switch (input[current]) {
00099                 case 0x00...0x7F:
00100                         break;
00101                 case 0x80...0xC1:
00102                         return 0;
00103                 case 0xC2...0xDF:
00104                         if(remaining < 1)
00105                                 return -1;
00106                         if(input[current + 1] < 0x80 || input[current + 1] > 0xBF)
00107                                 return 0;
00108                         current += 1;
00109                         break;
00110                 case 0xE0:
00111                         if(remaining < 2)
00112                                 return -(remaining);
00113                         if(input[current + 1] < 0xA0 || input[current + 1] > 0xBF)
00114                                 return 0;
00115                 case 0xE1...0xEF:
00116                         if(remaining < 2)
00117                                 return -(remaining);
00118                         if(input[current + 1] < 0x80 || input[current + 1] > 0xBF)
00119                                 return 0;
00120                         if(input[current + 2] < 0x80 || input[current + 2] > 0xBF)
00121                                 return 0;
00122                         current += 2;
00123                         break;
00124                 case 0xF0:
00125                         if(remaining < 3)
00126                                 return -(remaining);
00127                         if(input[current + 1] < 0x90 || input[current + 1] > 0xBF)
00128                                 return 0;
00129                 case 0xF1...0xF7:
00130                         if(remaining < 3)
00131                                 return -(remaining);
00132                         if(input[current + 1] < 0x80 || input[current + 1] > 0xBF)
00133                                 return 0;
00134                         if(input[current + 2] < 0x80 || input[current + 2] > 0xBF)
00135                                 return 0;
00136                         if(input[current + 3] < 0x80 || input[current + 3] > 0xBF)
00137                                 return 0;
00138                         current += 3;
00139                         break;
00140                 case 0xF8:
00141                         if(remaining < 4)
00142                                 return -(remaining);
00143                         if(input[current + 1] < 0x88 || input[current + 1] > 0xBF)
00144                                 return 0;
00145                 case 0xF9...0xFB:
00146                         if(remaining < 4)
00147                                 return -(remaining);
00148                         if(input[current + 1] < 0x80 || input[current + 1] > 0xBF)
00149                                 return 0;
00150                         if(input[current + 2] < 0x80 || input[current + 2] > 0xBF)
00151                                 return 0;
00152                         if(input[current + 3] < 0x80 || input[current + 3] > 0xBF)
00153                                 return 0;
00154                         if(input[current + 4] < 0x80 || input[current + 4] > 0xBF)
00155                                 return 0;
00156                         current += 4;
00157                         break;
00158                 case 0xFC:
00159                         if(remaining < 5)
00160                                 return -(remaining);
00161                         if(input[current + 1] < 0x84 || input[current + 1] > 0xBF)
00162                                 return 0;
00163                 case 0xFD:
00164                         if(input[current + 1] < 0x80 || input[current + 1] > 0xBF)
00165                                 return 0;
00166                         if(input[current + 2] < 0x80 || input[current + 2] > 0xBF)
00167                                 return 0;
00168                         if(input[current + 3] < 0x80 || input[current + 3] > 0xBF)
00169                                 return 0;
00170                         if(input[current + 4] < 0x80 || input[current + 4] > 0xBF)
00171                                 return 0;
00172                         if(input[current + 5] < 0x80 || input[current + 5] > 0xBF)
00173                                 return 0;
00174                         current += 5;
00175                         break;
00176                         /* multibyte */
00177                 case 0xFE...0xFF:
00178                         return 0;
00179                 default:
00180                         printf("Didn't handle %08x!\n", input[current]);
00181                 }
00182         }
00183         return 1;
00184 }


Variable Documentation

char* testStrings[]

Definition at line 4 of file utf8.c.

Referenced by main().


Generated on Mon May 28 04:25:48 2007 for BattletechMUX by  doxygen 1.4.7