<commit_before>/*
 * Copyright (c) 1995-1999, Index Data
 * See the file LICENSE for details.
 * <NAME>, <NAME>
 *
 * $Log: odr_oct.c,v $
 * Revision 1.13  1999-04-20 09:56:48  adam
 * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
 * Modified all encoders/decoders to reflect this change.
 *
 * Revision 1.12  1998/02/11 11:53:34  adam
 * Changed code so that it compiles as C++.
 *
 * Revision 1.11  1995/09/29 17:12:25  quinn
 * Smallish
 *
 * Revision 1.10  1995/09/27  15:02:59  quinn
 * Modified function heads & prototypes.
 *
 * Revision 1.9  1995/05/16  08:50:56  quinn
 * License, documentation, and memory fixes
 *
 * Revision 1.8  1995/03/17  10:17:54  quinn
 * Added memory management.
 *
 * Revision 1.7  1995/03/08  12:12:27  quinn
 * Added better error checking.
 *
 * Revision 1.6  1995/02/10  18:57:26  quinn
 * More in the way of error-checking.
 *
 * Revision 1.5  1995/02/09  15:51:49  quinn
 * Works better now.
 *
 * Revision 1.4  1995/02/07  14:13:46  quinn
 * Bug fixes.
 *
 * Revision 1.3  1995/02/03  17:04:38  quinn
 * *** empty log message ***
 *
 * Revision 1.2  1995/02/02  20:38:51  quinn
 * Updates.
 *
 * Revision 1.1  1995/02/02  16:21:54  quinn
 * First kick.
 *
 */

#include <odr.h>

/*
 * Top level octet string en/decoder.
 * Returns 1 on success, 0 on error.
 */
int odr_octetstring(ODR o, Odr_oct **p, int opt, const char *name)
{
    int res, cons = 0;

    if (o->error)
    	return 0;
    if (o->t_class < 0)
    {
    	o->t_class = ODR_UNIVERSAL;
    	o->t_tag = ODR_OCTETSTRING;
    }
    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt)) < 0)
    	return 0;
    if (!res)
    	return opt;
    if (o->direction == ODR_PRINT)
    {
	odr_prname(o, name);
    	fprintf(o->print, "OCTETSTRING(len=%d)\n", (*p)->len);
    	return 1;
    }
    if (o->direction == ODR_DECODE)
    {
    	*p = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct));
    	(*p)->size= 0;
    	(*p)->len = 0;
    	(*p)->buf = 0;
    }
    if (ber_octetstring(o, *p, cons))
    	return 1;
    o->error = OOTHER;
    return 0;
}

/*<commit_msg>Better dump of OCTET STRING.<commit_after>/*
 * Copyright (c) 1995-1999, Index Data
 * See the file LICENSE for details.
 * <NAME>, <NAME>
 *
 * $Log: odr_oct.c,v $
 * Revision 1.14  1999-10-19 12:35:55  adam
 * Better dump of OCTET STRING.
 *
 * Revision 1.13  1999/04/20 09:56:48  adam
 * Added 'name' paramter to encoder/decoder routines (typedef Odr_fun).
 * Modified all encoders/decoders to reflect this change.
 *
 * Revision 1.12  1998/02/11 11:53:34  adam
 * Changed code so that it compiles as C++.
 *
 * Revision 1.11  1995/09/29 17:12:25  quinn
 * Smallish
 *
 * Revision 1.10  1995/09/27  15:02:59  quinn
 * Modified function heads & prototypes.
 *
 * Revision 1.9  1995/05/16  08:50:56  quinn
 * License, documentation, and memory fixes
 *
 * Revision 1.8  1995/03/17  10:17:54  quinn
 * Added memory management.
 *
 * Revision 1.7  1995/03/08  12:12:27  quinn
 * Added better error checking.
 *
 * Revision 1.6  1995/02/10  18:57:26  quinn
 * More in the way of error-checking.
 *
 * Revision 1.5  1995/02/09  15:51:49  quinn
 * Works better now.
 *
 * Revision 1.4  1995/02/07  14:13:46  quinn
 * Bug fixes.
 *
 * Revision 1.3  1995/02/03  17:04:38  quinn
 * *** empty log message ***
 *
 * Revision 1.2  1995/02/02  20:38:51  quinn
 * Updates.
 *
 * Revision 1.1  1995/02/02  16:21:54  quinn
 * First kick.
 *
 */

#include <odr.h>

/*
 * Top level octet string en/decoder.
 * Returns 1 on success, 0 on error.
 */
int odr_octetstring(ODR o, Odr_oct **p, int opt, const char *name)
{
    int res, cons = 0;

    if (o->error)
    	return 0;
    if (o->t_class < 0)
    {
    	o->t_class = ODR_UNIVERSAL;
    	o->t_tag = ODR_OCTETSTRING;
    }
    if ((res = ber_tag(o, p, o->t_class, o->t_tag, &cons, opt)) < 0)
    	return 0;
    if (!res)
    	return opt;
    if (o->direction == ODR_PRINT)
    {
        int i;
	odr_prname(o, name);
    	fprintf(o->print, "OCTETSTRING(len=%d)", (*p)->len);
        for (i = 0; i<(*p)->len; i++)
        {
	    if (i < 5 || i > ((*p)->len - 4))
            {
                fprintf (o->print, " %02X", (*p)->buf[i]);
            }
            else if (i == 5)
                fprintf (o->print, " .. ");
        }
        fprintf(o->print, "\n");
    	return 1;
    }
    if (o->direction == ODR_DECODE)
    {
    	*p = (Odr_oct *)odr_malloc(o, sizeof(Odr_oct));
    	(*p)->size= 0;
    	(*p)->len = 0;
    	(*p)->buf = 0;
    }
    if (ber_octetstring(o, *p, cons))
    	return 1;
    o->error = OOTHER;
    return 0;
}

/*
{'fraction_non_alphanumeric': 0.15727133143233166, 'fraction_numerical': 0.10726036411493749, 'mean_word_length': 2.3163636363636364, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 44, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '52976', 'n_tokens_mistral': 2213, 'n_tokens_neox': 1864, 'n_words': 489}