<commit_before>/*
    This file is part of libcapwap.

    libcapwap is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    libcapwap is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Foobar.  If not, see <http://www.gnu.org/licenses/>.

*/

/**
 * @file
 * @brief Definitions for bstr functions
 * @defgroup Bstr BSTR Functions
 * @{
 */

#ifndef __BSTR_H
#define __BSTR_H

#include <stdlib.h>
#include <string.h>
#include <stdint.h>

/**
 * bstr type
 *
 * bstr_t serves as binary string where the first byte cponntains
 * the length of the string.
 */
typedef uint8_t* bstr_t;

extern uint8_t * bstr_create(uint8_t *data, uint8_t len);
extern uint8_t * bstr_create_from_cfgstr(const char * s);
extern uint8_t * bstr_replace( bstr_t * dst, uint8_t * bstr);

extern int bstr_to_str(char *dst, bstr_t str,char * def);



/**
 * Return the length of a bstr_t string.
 */
#define bstr_len(s) (*((uint8_t*)(s)))

/**
 * Return the data of a bstr_t string.
 */ 
#define bstr_data(s) ((s)+1)

/**
 * Return the actual size in memory a bstr_t string needs.
 */ 
#define bstr_size(len) (len+1)

/**
 * Max. length of a bstr_t string.
 */ 
#define BSTR_MAX_LEN 254

/**
  * The same as #bstr_t, but there are two bytes used
  * to describe the length of the string.
  */  
typedef uint8_t *bstr16_t;

#define bstr16_len(s) ( *((uint16_t*)(s)) )
#define bstr16_data(s) (((uint8_t*)s)+2)
#define bstr16_size(l) (l+2)
#define BSTR16_MAX_LEN (0xffff-2)

/*
static inline int bstr16_ncpy(uint8_t *dst,uint8_t*src,uint16_t len)
{
	*((uint16_t*)dst)=len;
	memcpy(dst+2,src,len);
	return len+2;
}
*/


static inline uint8_t * bstr16_create(uint8_t *data, uint16_t len)
{
	uint8_t * str = malloc(2+len*sizeof(uint8_t));
	if (!str)	
		return 0;
	*((uint16_t*)str)=len;
	memcpy(str+2,data,len);
	return str;
}


typedef uint8_t * vendorstr_t;

#define vendorstr_get_vendor_id(str)\
	( *((uint32_t*)((str)+2)))

#define vendorstr_set_vendor_id(str,id)\
	( *((uint32_t*)((str)+2)) = id)

#define vendorstr_len(str)\
	(*((uint16_t*)((str)+0)))

#define vendorstr_set_len(str,len)\
	(*((uint16_t*)((str)+0))=len)

#define vendorstr_data(str)\
	(((uint8_t*)(str))+6)

#define vendorstr_size(n)\
	(1+6+(len)*sizeof(uint8_t))


static inline uint8_t * vendorstr_create(uint32_t vendor_id, uint8_t *data, uint8_t len)
{
	uint8_t * str = malloc(vendorstr_size(len));
	if (!str)	
		return 0;

	vendorstr_set_vendor_id(str,vendor_id);
	vendorstr_set_len(str,len);
	memcpy(vendorstr_data(str),data,len);
	*(vendorstr_data(str)+vendorstr_len(str))=0;
	return str;

}

uint8_t * bstr16cfgstr(const char * s);


#endif

/**@}*/
<commit_msg>New prototypes.<commit_after>/*
    This file is part of libcapwap.

    libcapwap is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    libcapwap is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Foobar.  If not, see <http://www.gnu.org/licenses/>.

*/

/**
 * @file
 * @brief Definitions for bstr functions
 * @defgroup Bstr BSTR Functions
 * @{
 */

#ifndef __BSTR_H
#define __BSTR_H

#include <stdlib.h>
#include <string.h>
#include <stdint.h>

/**
 * bstr type
 *
 * bstr_t serves as binary string where the first byte cponntains
 * the length of the string.
 */
typedef uint8_t* bstr_t;

extern uint8_t * bstr_create(uint8_t *data, uint8_t len);
extern uint8_t * bstr_create_from_cfgstr(const char * s);
extern uint8_t * bstr_replace( bstr_t * dst, uint8_t * bstr);

extern int bstr_to_str(char *dst, bstr_t str,char * def);



/**
 * Return the length of a bstr_t string.
 */
#define bstr_len(s) (*((uint8_t*)(s)))

/**
 * Return the data of a bstr_t string.
 */ 
#define bstr_data(s) ((s)+1)

/**
 * Return the actual size in memory a bstr_t string needs.
 */ 
#define bstr_size(len) (len+1)

/**
 * Max. length of a bstr_t string.
 */ 
#define BSTR_MAX_LEN 254

/**
  * The same as #bstr_t, but there are two bytes used
  * to describe the length of the string.
  */  
typedef uint8_t *bstr16_t;

#define bstr16_len(s) ( *((uint16_t*)(s)) )
#define bstr16_data(s) (((uint8_t*)s)+2)
#define bstr16_size(l) (l+2)
#define BSTR16_MAX_LEN (0xffff-2)

/*
static inline int bstr16_ncpy(uint8_t *dst,uint8_t*src,uint16_t len)
{
	*((uint16_t*)dst)=len;
	memcpy(dst+2,src,len);
	return len+2;
}
*/


static inline uint8_t * bstr16_create(uint8_t *data, uint16_t len)
{
	uint8_t * str = malloc(2+len*sizeof(uint8_t));
	if (!str)	
		return 0;
	*((uint16_t*)str)=len;
	memcpy(str+2,data,len);
	return str;
}

uint8_t * bstr16_create_from_str(const char *s);


typedef uint8_t * vendorstr_t;

#define vendorstr_get_vendor_id(str)\
	( *((uint32_t*)((str)+2)))

#define vendorstr_set_vendor_id(str,id)\
	( *((uint32_t*)((str)+2)) = id)

#define vendorstr_len(str)\
	(*((uint16_t*)((str)+0)))

#define vendorstr_set_len(str,len)\
	(*((uint16_t*)((str)+0))=len)

#define vendorstr_data(str)\
	(((uint8_t*)(str))+6)

#define vendorstr_size(n)\
	(1+6+(n)*sizeof(uint8_t))


static inline uint8_t * vendorstr_create(uint32_t vendor_id, uint8_t *data, uint8_t len)
{
	uint8_t * str = malloc(vendorstr_size(len));
	if (!str)	
		return 0;

	vendorstr_set_vendor_id(str,vendor_id);
	vendorstr_set_len(str,len);
	memcpy(vendorstr_data(str),data,len);
	*(vendorstr_data(str)+vendorstr_len(str))=0;
	return str;

}

uint8_t * vendorstr_create_from_str(uint32_t vendor_id,const char *s);


uint8_t * bstr16cfgstr(const char * s);


#endif

/**@}*/

{'fraction_non_alphanumeric': 0.1366181410974244, 'fraction_numerical': 0.027835546312589984, 'mean_word_length': 4.422376409366869, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, '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': '7345739', 'n_tokens_mistral': 2536, 'n_tokens_neox': 2429, 'n_words': 648}