Enhancement #750 » 0023-sanitize-fix-const-char-being-used-as-non-const.patch
| src/line.c | ||
|---|---|---|
| void _irc_line_append(struct line *l, const char *s) | ||
| { | ||
| 	array_push(&l->words, (char *)s); | ||
| 	array_push(&l->words, bip_strdup(s)); | ||
| } | ||
| void irc_line_append(struct line *l, const char *s) | ||
| ... | ... | |
| { | ||
| 	char *tmp; | ||
| 	char *l; | ||
| 	const char *prev; | ||
| 	tmp = (char *)irc_line_elem(line, 1); | ||
| 	prev = irc_line_elem(line, 1); | ||
| 	tmp = bip_strdup(prev); | ||
| 	array_set(&line->words, 1, nick); | ||
| 	l = irc_line_to_string(line); | ||
| 	array_set(&line->words, 1, tmp); | ||
| 	bip_cfree(prev); | ||
| 	return l; | ||
| } | ||
| ... | ... | |
| void irc_line_drop(struct line *line, int elem) | ||
| { | ||
| 	free(array_drop(&line->words, elem)); | ||
| 	bip_cfree(array_drop(&line->words, elem)); | ||
| } | ||
| int irc_line_elem_equals(struct line *line, int elem, const char *cmp) | ||
| ... | ... | |
| 	int i; | ||
| 	for (i = 0; i < array_count(&l->words); i++) | ||
| 		free(array_get(&l->words, i)); | ||
| 		bip_cfree(array_get(&l->words, i)); | ||
| 	array_deinit(&l->words); | ||
| 	if (l->origin) | ||
| 		free(l->origin); | ||
| src/log.c | ||
|---|---|---|
| 	if (mode_args) { | ||
| 		for (i = 0; i < array_count(mode_args); i++) { | ||
| 			snprintf(tmpbuf2, (size_t)LOGLINE_MAXLEN, "%s %s", tmpbuf, | ||
| 					(char *)array_get(mode_args, i)); | ||
| 					(const char*)array_get(mode_args, i)); | ||
| 			tmp = tmpbuf; | ||
| 			tmpbuf = tmpbuf2; | ||
| 			tmpbuf2 = tmp; | ||
| ... | ... | |
| 				irc_line_init(&l); | ||
| 				l.origin = P_IRCMASK; | ||
| 				if (dest == cli_nick) | ||
| 					l.origin = (char *)bl; | ||
| 					l.origin = bip_strdup(bl); | ||
| 				_irc_line_append(&l, "PRIVMSG"); | ||
| 				_irc_line_append(&l, dest); | ||
| 				_irc_line_append(&l, "End of backlog"); | ||
| src/util.c | ||
|---|---|---|
| 	return r; | ||
| } | ||
| void bip_cfree(const void *ptr) | ||
| { | ||
| 	if (!ptr) | ||
| 		return; | ||
| // there's no other way to free a const pointer | ||
| #pragma GCC diagnostic push | ||
| #pragma GCC diagnostic ignored "-Wcast-qual" | ||
| 	free((void *)ptr); | ||
| #pragma GCC diagnostic pop | ||
| } | ||
| char *bip_strdup(const char *str) | ||
| { | ||
| 	char *r = strdup(str); | ||
| ... | ... | |
| 	a->elemc = index + 1; | ||
| } | ||
| void *array_drop(array_t *a, int index) | ||
| const void *array_drop(array_t *a, int index) | ||
| { | ||
| 	int i; | ||
| 	void *ret; | ||
| 	const void *ret; | ||
| 	assert(a && array_includes(a, index)); | ||
| src/util.h | ||
|---|---|---|
| typedef struct array { | ||
| 	int elemc; | ||
| 	void **elemv; | ||
| 	const void **elemv; | ||
| } array_t; | ||
| #define MOVE_STRING(dest, src) do {\ | ||
| ... | ... | |
| void *bip_malloc(size_t size); | ||
| void *bip_calloc(size_t nmemb, size_t size); | ||
| void *bip_realloc(void *ptr, size_t size); | ||
| void bip_cfree(const void *ptr); | ||
| char *bip_strdup(const char *str); | ||
| char *bip_strcat_fit(size_t *remaining, char *str, const char *str2); | ||
| char *bip_strcatf_fit(size_t *remaining, char *str, const char *str2, ...); | ||
| void bip_clock_gettime(clockid_t clockid, struct timespec *tp); | ||
| #define array_each(a, idx, ptr) for ((idx) = 0; \ | ||
| 		(idx) < (a)->elemc && (((ptr) = array_get((a), (idx))) || 1); \ | ||
| 		(idx) < (a)->elemc && (((ptr) = bip_strdup(array_get((a), (idx)))) || 1); \ | ||
| 		(idx)++) | ||
| void array_init(array_t *a); | ||
| ... | ... | |
| array_t *array_extract(array_t *a, int index, int upto); | ||
| void array_deinit(array_t *a); | ||
| void array_free(array_t *a); | ||
| void *array_drop(array_t *a, int index); | ||
| const void *array_drop(array_t *a, int index); | ||
| static inline int array_count(array_t *a) | ||
| { | ||
| 	assert(a); | ||
| ... | ... | |
| 	a->elemv[index] = ptr; | ||
| } | ||
| static inline void *array_get(array_t *a, int index) | ||
| static inline const void *array_get(array_t *a, int index) | ||
| { | ||
| 	assert(a && array_includes(a, index)); | ||
| 	return a->elemv[index]; | ||
| ... | ... | |
| 	if (a->elemc == 0) | ||
| 		return NULL; | ||
| 	if (a->elemc == 1) { | ||
| 		void *ptr = a->elemv[0]; | ||
| 		void *ptr = bip_strdup(a->elemv[0]); | ||
| 		free(a->elemv); | ||
| 		a->elemv = NULL; | ||
| 		a->elemc = 0; | ||
| 		return ptr; | ||
| 	} | ||
| 	return a->elemv[--a->elemc]; | ||
| 	return (void *)bip_strdup(a->elemv[--a->elemc]); | ||
| } | ||
| #endif | ||