Annotation of embedaddon/php/ext/mbstring/libmbfl/tests/strcut.c, revision 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>