Annotation of embedaddon/php/ext/mbstring/libmbfl/tests/strcut.c, revision 1.1.1.1

1.1       misho       1: /**
                      2:  * this is a small sample script to use libmbfl.
                      3:  * Rui Hirokawa <hirokawa@php.net>
                      4:  *
                      5:  * this file is encoded in EUC-JP.
                      6:  */
                      7: 
                      8: #include <stdio.h>
                      9: #include <stdlib.h>
                     10: #include <string.h>
                     11: #include <errno.h>
                     12: #include "mbfl/mbfilter.h"
                     13: 
                     14: static void hexdump(const mbfl_string *ptr)
                     15: {
                     16:        unsigned int i;
                     17: 
                     18:        for (i = 0; i < ptr->len; i++) {
                     19:                printf("%%%02x", ptr->val[i]);
                     20:        }
                     21: 
                     22:        printf(" (%u)\n", ptr->len);
                     23: }
                     24: 
                     25: int main(int argc, char **argv)
                     26: {
                     27:        enum mbfl_no_encoding no_encoding;
                     28:        enum mbfl_no_language no_language;
                     29:        mbfl_memory_device dev;
                     30:        mbfl_string string;
                     31:        int offset, length;
                     32:        int final = 0;
                     33:        int state = 0;
                     34: 
                     35:        if (argc < 5) {
                     36:                fprintf(stderr, "Usage: %s lang encoding offset length\n", argv[0]);
                     37:                return EXIT_FAILURE;
                     38:        }
                     39: 
                     40:        if ((no_language = mbfl_name2no_language(argv[1])) ==
                     41:                        mbfl_no_language_invalid) {
                     42:                printf("Unsupported NLS: %s\n", argv[1]);
                     43:                return EXIT_FAILURE;
                     44:        }
                     45: 
                     46:        if ((no_encoding = mbfl_name2no_encoding(argv[2])) ==
                     47:                        mbfl_no_encoding_invalid) {
                     48:                printf("Unsupported encoding: %s\n", argv[2]);
                     49:                return EXIT_FAILURE;
                     50:        }
                     51: 
                     52:        errno = 0;
                     53:        offset = strtol(argv[3], NULL, 10);
                     54:        if (errno) {
                     55:                printf("Invalid offset: %s\n", argv[3]);
                     56:                return EXIT_FAILURE;
                     57:        }
                     58: 
                     59:        length = strtol(argv[4], NULL, 10);
                     60:        if (errno) {
                     61:                printf("Invalid length: %s\n", argv[4]);
                     62:                return EXIT_FAILURE;
                     63:        }
                     64: 
                     65: 
                     66:        do {
                     67:                mbfl_string result;
                     68: 
                     69:                mbfl_memory_device_init(&dev, 0, 4096);
                     70:                mbfl_string_init_set(&string, no_language, no_encoding);
                     71: 
                     72:                for (;;) {
                     73:                        const int c = fgetc(stdin);
                     74: 
                     75:                        if (c == EOF) {
                     76:                                final = 1;
                     77:                                break;
                     78:                        } else if (c == 10) {
                     79:                                if (state == 1) {
                     80:                                        state = 0;
                     81:                                        continue;
                     82:                                }
                     83:                                break;
                     84:                        } else if (c == 13) {
                     85:                                state = 1;
                     86:                                break;
                     87:                        }
                     88: 
                     89:                        if (dev.pos >= dev.length) {
                     90:                                if (dev.length + dev.allocsz < dev.length) {
                     91:                                        printf("Unable to allocate memory\n");
                     92:                                        return EXIT_FAILURE;
                     93:                                }
                     94: 
                     95:                                mbfl_memory_device_realloc(&dev, dev.length + dev.allocsz,
                     96:                                                dev.allocsz);
                     97:                        }
                     98: 
                     99:                        dev.buffer[dev.pos++] = (unsigned char)c;
                    100:                }
                    101: 
                    102:                mbfl_memory_device_result(&dev, &string);
                    103:                if (mbfl_strcut(&string, &result, offset, length)) {
                    104:                        hexdump(&result);
                    105:                        mbfl_string_clear(&result);
                    106:                } else {
                    107:                        printf("***ERROR***\n");
                    108:                }
                    109:                mbfl_string_clear(&string);
                    110:        } while (!final);
                    111: 
                    112:        return EXIT_SUCCESS;
                    113: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>