1 /* ----------------------------------------------------------------------------
2 * unijp.c
3 * ----------------------------------------------------------------------------
4 * Mastering programmed by YAMASHINA Hio
5 *
6 * Copyright 2008 YAMASHINA Hio
7 * ----------------------------------------------------------------------------
8 * $Id$
9 * ------------------------------------------------------------------------- */
10
11 #include "unijp.h"
12 #include "unijp_build.h"
13
14 /* ----------------------------------------------------------------------------
15 : uj_new(str, bytes_len, icode).
16 +--------------------------------------------------------------------------- */
uj_new(const uj_uint8 * str,uj_size_t bytes,uj_charcode_t icode)17 unijp_t* uj_new(const uj_uint8* str, uj_size_t bytes, uj_charcode_t icode)
18 {
19 unijp_t* uj;
20 uj_conv_t conv_in;
21 uj_conv_t conv_out;
22 uj_conv_t* conv_ret;
23 const uj_alloc_t* const alloc = _uj_default_alloc;
24
25 _uj_conv_set_const(&conv_in, alloc, str, bytes);
26 conv_ret = _uj_any_to_utf8(&conv_in, &conv_out, icode);
27 if( conv_ret != NULL )
28 {
29 uj = _uj_alloc(alloc, sizeof(*uj));
30 if( uj!=NULL )
31 {
32 _uj_conv_own_string(&conv_out);
33 uj->alloc = _uj_default_alloc;
34 uj->data = conv_out.buf;
35 uj->data_len = conv_out.buf_len;
36 uj->is_binary = icode==ujc_binary;
37 }else
38 {
39 _uj_conv_free_buffer(&conv_out);
40 }
41 }else
42 {
43 uj = NULL;
44 }
45 return uj;
46 }
47
48 /* ----------------------------------------------------------------------------
49 : uj_delete(uj).
50 +--------------------------------------------------------------------------- */
uj_delete(unijp_t * uj)51 void uj_delete(unijp_t* uj)
52 {
53 _uj_free(uj->alloc, uj->data);
54 _uj_free(uj->alloc, uj);
55 }
56
57 /* ----------------------------------------------------------------------------
58 * End of File.
59 * ------------------------------------------------------------------------- */
60