Lines Matching refs:buf

87 asn1buf_create(asn1buf **buf)
89 *buf = (asn1buf*)malloc(sizeof(asn1buf));
90 if (*buf == NULL) return ENOMEM;
91 (*buf)->base = NULL;
92 (*buf)->bound = NULL;
93 (*buf)->next = NULL;
98 asn1buf_wrap_data(asn1buf *buf, const krb5_data *code)
101 buf->next = buf->base = code->data;
102 buf->bound = code->data + code->length - 1;
107 asn1buf_imbed(asn1buf *subbuf, const asn1buf *buf, const unsigned int length, const int indef)
109 if (buf->next > buf->bound + 1) return ASN1_OVERRUN;
110 subbuf->base = subbuf->next = buf->next;
112 if (length > (size_t)(buf->bound + 1 - buf->next)) return ASN1_OVERRUN;
115 subbuf->bound = buf->bound;
120 asn1buf_sync(asn1buf *buf, asn1buf *subbuf,
128 buf->next = subbuf->bound + 1;
135 buf->next = subbuf->next;
141 asn1buf_skiptail(asn1buf *buf, const unsigned int length, const int indef)
149 if (length <= (size_t)(buf->bound - buf->next + 1))
150 buf->next += length;
155 if (buf->bound - buf->next + 1 <= 0)
157 retval = asn1_get_tag_2(buf, &t);
160 if (t.length <= (size_t)(buf->bound - buf->next + 1))
161 buf->next += t.length;
174 asn1buf_destroy(asn1buf **buf)
176 if (*buf != NULL) {
177 free((*buf)->base);
178 free(*buf);
179 *buf = NULL;
187 asn1buf_insert_octet(asn1buf *buf, const int o)
191 retval = asn1buf_ensure_space(buf,1U);
193 *(buf->next) = (char)o;
194 (buf->next)++;
199 asn1buf_insert_bytestring(asn1buf *buf, const unsigned int len, const void *sv)
205 retval = asn1buf_ensure_space(buf,len);
208 for (length=1; length<=len; length++,(buf->next)++)
209 *(buf->next) = (s[len-length]);
215 asn1_error_code asn1buf_remove_octet(asn1buf *buf, asn1_octet *o)
217 if (buf->next > buf->bound) return ASN1_OVERRUN;
218 *o = (asn1_octet)(*((buf->next)++));
223 asn1buf_remove_octetstring(asn1buf *buf, const unsigned int len, asn1_octet **s)
227 if (buf->next > buf->bound + 1) return ASN1_OVERRUN;
228 if (len > (size_t)(buf->bound + 1 - buf->next)) return ASN1_OVERRUN;
237 (*s)[i] = (asn1_octet)(buf->next)[i];
238 buf->next += len;
243 asn1buf_remove_charstring(asn1buf *buf, const unsigned int len, char **s)
247 if (buf->next > buf->bound + 1) return ASN1_OVERRUN;
248 if (len > (size_t)(buf->bound + 1 - buf->next)) return ASN1_OVERRUN;
256 (*s)[i] = (char)(buf->next)[i];
257 buf->next += len;
262 asn1buf_remains(asn1buf *buf, int indef)
265 if (buf == NULL || buf->base == NULL) return 0;
266 remain = buf->bound - buf->next +1;
271 if (indef && remain >= 2 && !*(buf->next) && !*(buf->next + 1))
277 asn12krb5_buf(const asn1buf *buf, krb5_data **code)
287 d->length = asn1buf_len(buf);
294 d->data[i] = buf->base[d->length - i - 1];
310 asn1buf_unparse(const asn1buf *buf, char **s)
313 if (buf == NULL) {
316 } else if (buf->base == NULL) {
320 unsigned int length = asn1buf_len(buf);
327 /* OLDDECLARG( (*s)[i] = , (buf->base)[length-i-1]) */
333 asn1buf_hex_unparse(const asn1buf *buf, char **s)
341 if (buf == NULL) {
344 } else if (buf->base == NULL) {
348 unsigned int length = asn1buf_len(buf);
354 (*s)[3*(length-i-1)] = hexchar(((buf->base)[i]&0xF0)>>4);
355 (*s)[3*(length-i-1)+1] = hexchar((buf->base)[i]&0x0F);
367 asn1buf_size(const asn1buf *buf)
369 if (buf == NULL || buf->base == NULL) return 0;
370 return buf->bound - buf->base + 1;
375 asn1buf_free(const asn1buf *buf)
377 if (buf == NULL || buf->base == NULL) return 0;
378 else return buf->bound - buf->next + 1;
383 asn1buf_ensure_space(asn1buf *buf, const unsigned int amount)
385 unsigned int avail = asn1buf_free(buf);
388 return asn1buf_expand(buf, amount-avail);
392 asn1buf_expand(asn1buf *buf, unsigned int inc)
399 if (buf != NULL)
400 next_offset = buf->next - buf->base;
404 if (buf->base == NULL) bound_offset = -1;
405 else bound_offset = buf->bound - buf->base;
410 buf->base = realloc(buf->base,
411 (asn1buf_size(buf)+inc) * sizeof(asn1_octet));
412 if (buf->base == NULL) return ENOMEM; /* XXX leak */
413 buf->bound = (buf->base) + bound_offset + inc;
414 buf->next = (buf->base) + next_offset;
420 asn1buf_len(const asn1buf *buf)
422 return buf->next - buf->base;