… | |
… | |
84 | psiconv_u32 psiconv_buffer_length(const psiconv_buffer buf) |
84 | psiconv_u32 psiconv_buffer_length(const psiconv_buffer buf) |
85 | { |
85 | { |
86 | return psiconv_list_length(buf->data); |
86 | return psiconv_list_length(buf->data); |
87 | } |
87 | } |
88 | |
88 | |
89 | |
|
|
90 | psiconv_u8 *psiconv_buffer_get(const psiconv_buffer buf, psiconv_u32 off) |
89 | psiconv_u8 *psiconv_buffer_get(const psiconv_buffer buf, psiconv_u32 off) |
91 | { |
90 | { |
92 | return psiconv_list_get(buf->data,off); |
91 | return psiconv_list_get(buf->data,off); |
93 | } |
92 | } |
94 | |
93 | |
95 | int psiconv_buffer_add(psiconv_buffer buf,psiconv_u8 data) |
94 | int psiconv_buffer_add(psiconv_buffer buf,psiconv_u8 data) |
96 | { |
95 | { |
97 | return psiconv_list_add(buf->data,&data); |
96 | return psiconv_list_add(buf->data,&data); |
98 | } |
97 | } |
99 | |
98 | |
100 | size_t psiconv_buffer_fread(psiconv_buffer buf,size_t size, FILE *f) |
99 | size_t psiconv_buffer_fread(psiconv_buffer buf, size_t size, FILE *f) |
101 | { |
100 | { |
102 | return psiconv_list_fread(buf->data,size,f); |
101 | return psiconv_list_fread(buf->data,size,f); |
103 | } |
102 | } |
104 | |
103 | |
105 | int psiconv_buffer_fread_all(psiconv_buffer buf, FILE *f) |
104 | int psiconv_buffer_fread_all(psiconv_buffer buf, FILE *f) |
… | |
… | |
108 | } |
107 | } |
109 | |
108 | |
110 | int psiconv_buffer_fwrite_all(const psiconv_buffer buf, FILE *f) |
109 | int psiconv_buffer_fwrite_all(const psiconv_buffer buf, FILE *f) |
111 | { |
110 | { |
112 | return psiconv_list_fwrite_all(buf->data,f); |
111 | return psiconv_list_fwrite_all(buf->data,f); |
|
|
112 | } |
|
|
113 | |
|
|
114 | int psiconv_buffer_subbuffer(psiconv_buffer *buf, const psiconv_buffer org, |
|
|
115 | psiconv_u32 offset, psiconv_u32 length) |
|
|
116 | { |
|
|
117 | int i; |
|
|
118 | int res; |
|
|
119 | psiconv_u8 *data; |
|
|
120 | if (! (*buf = psiconv_buffer_new())) { |
|
|
121 | res = PSICONV_E_NOMEM; |
|
|
122 | goto ERROR1; |
|
|
123 | } |
|
|
124 | for (i = 0; i < length; i++) { |
|
|
125 | if (!(data = psiconv_buffer_get(org,offset+i))) { |
|
|
126 | res = PSICONV_E_OTHER; |
|
|
127 | goto ERROR2; |
|
|
128 | } |
|
|
129 | if ((res = psiconv_buffer_add(*buf,*data))) { |
|
|
130 | goto ERROR2; |
|
|
131 | } |
|
|
132 | } |
|
|
133 | |
|
|
134 | ERROR2: |
|
|
135 | psiconv_buffer_free(*buf); |
|
|
136 | ERROR1: |
|
|
137 | return res; |
113 | } |
138 | } |
114 | |
139 | |
115 | int psiconv_buffer_concat(psiconv_buffer buf, const psiconv_buffer extra) |
140 | int psiconv_buffer_concat(psiconv_buffer buf, const psiconv_buffer extra) |
116 | { |
141 | { |
117 | int res; |
142 | int res; |