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>