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