Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
pkgvec: multiple fixes
Baptiste Daroussin committed 1 year ago
commit d710ba3e4233bc0f54692c17ef5045e79c4d9c0c
parent 32d62ae
2 files changed +17 -7
modified libpkg/pkgvec.h
@@ -7,6 +7,7 @@
#pragma once

#include <stdbool.h>
+
#include <stdlib.h>
#include <stddef.h>

#define pkgvec_t(Type) \
@@ -16,31 +17,37 @@
	memset((v), 0, sizeof(*(v)))

#define pkgvec_free(v) \
-
	free((v)->d);
+
	do { \
+
		free((v)->d); \
+
		(v)->d == NULL; \
+
		memset((v), 0, sizeof(*(v))); \
+
	} while (0)

#define pkgvec_free_and_free(v, free_func)            \
	do {                                          \
		for (size_t _i; _i < (v)->len ; _i++) { \
			free_func((v)->d[_i]);          \
+
			(v)->d[_i] = NULL;   \
		}                                     \
-
		free((v)->d);                           \
+
		pkgvec_free((v)); \
	} while(0)

#define pkgvec_first(v) \
	(v)->d[0]

#define pkgvec_last(v) \
-
	(v)->d[d->len -1]
+
	(v)->d[(v)->len -1]

-
#define pkgvec_clear \
+
#define pkgvec_clear(v) \
	(v)->len = 0

#define pkgvec_clear_and_free(v, free_func) \
	do {                                          \
		for (size_t _i; _i < (v)->len ; _i++) { \
			free_func((v)->d[_i]);          \
+
			(v)->d[_i] = NULL;   \
		}                                     \
-
		(v)->len = 0                            \
+
		(v)->len = 0;                            \
	} while (0)

#define pkgvec_push(v, _d)                                            \
modified tests/Makefile.autosetup
@@ -12,7 +12,8 @@ TESTS= \
	lua \
	ssh \
	utils \
-
	metalog
+
	metalog \
+
	vec

TESTS_SH= \
	frontend/pkg.sh \
@@ -82,6 +83,7 @@ packing_OBJS= lib/packing.o
ssh_OBJS=	lib/ssh.o
utils_OBJS=	lib/utils.o
metalog_OBJS=	lib/metalog.o
+
vec_OBJS=	lib/vec.o

SRCS=	\
	$(packing_OBJS:.o=.c) \
@@ -95,7 +97,8 @@ SRCS= \
	$(pkg_validation_OBJS:.o=.c) \
	$(ssh_OBJS:.o=.c) \
	$(utils_OBJS:.o=.c) \
-
	$(metalog_OBJS:.o=.c)
+
	$(metalog_OBJS:.o=.c) \
+
	$(vec_OBJS:.o=.c)

include $(MK)/common.mk