diff --git a/include/gpiod.h b/include/gpiod.h
index 0512a8f..e6a4645 100644
--- a/include/gpiod.h
+++ b/include/gpiod.h
@@ -9,6 +9,7 @@
 #define __LIBGPIOD_GPIOD_H__
 
 #include <stdbool.h>
+#include <stddef.h>
 #include <stdint.h>
 
 #ifdef __cplusplus
@@ -99,7 +100,7 @@ const char *gpiod_chip_get_path(struct gpiod_chip *chip);
  * @param chip GPIO chip object.
  * @return Number of GPIO lines.
  */
-unsigned int gpiod_chip_get_num_lines(struct gpiod_chip *chip);
+size_t gpiod_chip_get_num_lines(struct gpiod_chip *chip);
 
 /**
  * @brief Get the current snapshot of information about the line at given
@@ -940,7 +941,7 @@ gpiod_line_config_set_output_value_override(struct gpiod_line_config *config,
  *               the previous argument.
  */
 void gpiod_line_config_set_output_values(struct gpiod_line_config *config,
-					 unsigned int num_values,
+					 size_t num_values,
 					 const unsigned int *offsets,
 					 const int *values);
 
@@ -1016,8 +1017,7 @@ enum {
  * @param config Line config object.
  * @return Number of individual overridden settings.
  */
-unsigned int
-gpiod_line_config_get_num_overrides(struct gpiod_line_config *config);
+size_t gpiod_line_config_get_num_overrides(struct gpiod_line_config *config);
 
 /**
  * @brief Get the list of overridden offsets and the corresponding types of
@@ -1090,7 +1090,7 @@ gpiod_request_config_get_consumer(struct gpiod_request_config *config);
  *       accepted by the kernel (64 lines) are silently dropped.
  */
 void gpiod_request_config_set_offsets(struct gpiod_request_config *config,
-				      unsigned int num_offsets,
+				      size_t num_offsets,
 				      const unsigned int *offsets);
 
 /**
@@ -1098,7 +1098,7 @@ void gpiod_request_config_set_offsets(struct gpiod_request_config *config,
  * @param config Request config object.
  * @return Number of line offsets in this request config.
  */
-unsigned int
+size_t
 gpiod_request_config_get_num_offsets(struct gpiod_request_config *config);
 
 /**
@@ -1119,14 +1119,14 @@ void gpiod_request_config_get_offsets(struct gpiod_request_config *config,
  */
 void
 gpiod_request_config_set_event_buffer_size(struct gpiod_request_config *config,
-					   unsigned int event_buffer_size);
+					   size_t event_buffer_size);
 
 /**
  * @brief Get the edge event buffer size from this request config.
  * @param config Request config object.
  * @return Current edge event buffer size setting.
  */
-unsigned int
+size_t
 gpiod_request_config_get_event_buffer_size(struct gpiod_request_config *config);
 
 /**
@@ -1149,7 +1149,7 @@ void gpiod_line_request_release(struct gpiod_line_request *request);
  * @param request Line request object.
  * @return Number of requested lines.
  */
-unsigned int gpiod_line_request_get_num_lines(struct gpiod_line_request *request);
+size_t gpiod_line_request_get_num_lines(struct gpiod_line_request *request);
 
 /**
  * @brief Get the hardware offsets of lines in this request.
@@ -1179,7 +1179,7 @@ int gpiod_line_request_get_value(struct gpiod_line_request *request,
  * @return 0 on success, -1 on failure.
  */
 int gpiod_line_request_get_values_subset(struct gpiod_line_request *request,
-					 unsigned num_lines,
+					 size_t num_lines,
 					 const unsigned int *offsets,
 					 int *values);
 
@@ -1216,7 +1216,7 @@ int gpiod_line_request_set_value(struct gpiod_line_request *request,
  * @return 0 on success, -1 on failure.
  */
 int gpiod_line_request_set_values_subset(struct gpiod_line_request *request,
-					 unsigned int num_lines,
+					 size_t num_lines,
 					 const unsigned int *offsets,
 					 const int *values);
 
@@ -1272,7 +1272,7 @@ int gpiod_line_request_edge_event_wait(struct gpiod_line_request *request,
  */
 int gpiod_line_request_edge_event_read(struct gpiod_line_request *request,
 				       struct gpiod_edge_event_buffer *buffer,
-				       unsigned int max_events);
+				       size_t max_events);
 
 /**
  * @}
@@ -1361,7 +1361,7 @@ unsigned long gpiod_edge_event_get_line_seqno(struct gpiod_edge_event *event);
  *       capacity is larger than 1024, it will be limited to 1024.
  */
 struct gpiod_edge_event_buffer *
-gpiod_edge_event_buffer_new(unsigned int capacity);
+gpiod_edge_event_buffer_new(size_t capacity);
 
 /**
  * @brief Get the capacity (the max number of events that can be stored) of
@@ -1369,7 +1369,7 @@ gpiod_edge_event_buffer_new(unsigned int capacity);
  * @param buffer Edge event buffer.
  * @return The capacity of the buffer.
  */
-unsigned int
+size_t
 gpiod_edge_event_buffer_get_capacity(struct gpiod_edge_event_buffer *buffer);
 
 /**
@@ -1395,7 +1395,7 @@ gpiod_edge_event_buffer_get_event(struct gpiod_edge_event_buffer *buffer,
  * @param buffer Edge event buffer.
  * @return Number of events stored in this buffer.
  */
-unsigned int
+size_t
 gpiod_edge_event_buffer_get_num_events(struct gpiod_edge_event_buffer *buffer);
 
 /**
diff --git a/lib/chip.c b/lib/chip.c
index 74544f5..b881be1 100644
--- a/lib/chip.c
+++ b/lib/chip.c
@@ -15,7 +15,7 @@
 
 struct gpiod_chip {
 	int fd;
-	unsigned int num_lines;
+	size_t num_lines;
 	char name[32];
 	char label[32];
 	char *path;
@@ -105,7 +105,7 @@ GPIOD_API const char *gpiod_chip_get_path(struct gpiod_chip *chip)
 	return chip->path;
 }
 
-GPIOD_API unsigned int gpiod_chip_get_num_lines(struct gpiod_chip *chip)
+GPIOD_API size_t gpiod_chip_get_num_lines(struct gpiod_chip *chip)
 {
 	return chip->num_lines;
 }
diff --git a/lib/edge-event.c b/lib/edge-event.c
index 69c0d96..8f993e8 100644
--- a/lib/edge-event.c
+++ b/lib/edge-event.c
@@ -21,8 +21,8 @@ struct gpiod_edge_event {
 };
 
 struct gpiod_edge_event_buffer {
-	unsigned int capacity;
-	unsigned int num_events;
+	size_t capacity;
+	size_t num_events;
 	struct gpiod_edge_event *events;
 	struct gpio_v2_line_event *event_data;
 };
@@ -79,7 +79,7 @@ gpiod_edge_event_get_line_seqno(struct gpiod_edge_event *event)
 }
 
 GPIOD_API struct gpiod_edge_event_buffer *
-gpiod_edge_event_buffer_new(unsigned int capacity)
+gpiod_edge_event_buffer_new(size_t capacity)
 {
 	struct gpiod_edge_event_buffer *buf;
 
@@ -111,7 +111,7 @@ gpiod_edge_event_buffer_new(unsigned int capacity)
 	return buf;
 }
 
-GPIOD_API unsigned int
+GPIOD_API size_t
 gpiod_edge_event_buffer_get_capacity(struct gpiod_edge_event_buffer *buffer)
 {
 	return buffer->capacity;
@@ -140,7 +140,7 @@ gpiod_edge_event_buffer_get_event(struct gpiod_edge_event_buffer *buffer,
 	return &buffer->events[index];
 }
 
-GPIOD_API unsigned int
+GPIOD_API size_t
 gpiod_edge_event_buffer_get_num_events(struct gpiod_edge_event_buffer *buffer)
 {
 	return buffer->num_events;
@@ -148,7 +148,7 @@ gpiod_edge_event_buffer_get_num_events(struct gpiod_edge_event_buffer *buffer)
 
 int gpiod_edge_event_buffer_read_fd(int fd,
 				    struct gpiod_edge_event_buffer *buffer,
-				    unsigned int max_events)
+				    size_t max_events)
 {
 	struct gpio_v2_line_event *curr;
 	struct gpiod_edge_event *event;
diff --git a/lib/internal.h b/lib/internal.h
index 32f36b5..9af2cda 100644
--- a/lib/internal.h
+++ b/lib/internal.h
@@ -29,7 +29,7 @@ int gpiod_line_config_to_kernel(struct gpiod_line_config *config,
 struct gpiod_line_request *
 gpiod_line_request_from_kernel(struct gpio_v2_line_request *reqbuf);
 int gpiod_edge_event_buffer_read_fd(int fd, struct gpiod_edge_event_buffer *buffer,
-				    unsigned int max_events);
+				    size_t max_events);
 struct gpiod_info_event *
 gpiod_info_event_from_kernel(struct gpio_v2_line_info_changed *evbuf);
 struct gpiod_info_event *gpiod_info_event_read_fd(int fd);
diff --git a/lib/line-config.c b/lib/line-config.c
index b58603f..a4b4d7b 100644
--- a/lib/line-config.c
+++ b/lib/line-config.c
@@ -671,7 +671,7 @@ gpiod_line_config_set_output_value_override(struct gpiod_line_config *config,
 
 GPIOD_API void
 gpiod_line_config_set_output_values(struct gpiod_line_config *config,
-				    unsigned int num_values,
+				    size_t num_values,
 				    const unsigned int *offsets,
 				    const int *values)
 {
@@ -746,7 +746,7 @@ static bool base_debounce_period_is_equal(struct base_config *base,
 	return true;
 }
 
-GPIOD_API unsigned int
+GPIOD_API size_t
 gpiod_line_config_get_num_overrides(struct gpiod_line_config *config)
 {
 	struct override_config *override;
diff --git a/lib/line-request.c b/lib/line-request.c
index 45e11e3..69e4e11 100644
--- a/lib/line-request.c
+++ b/lib/line-request.c
@@ -14,7 +14,7 @@
 
 struct gpiod_line_request {
 	unsigned int offsets[GPIO_V2_LINES_MAX];
-	unsigned int num_lines;
+	size_t num_lines;
 	int fd;
 };
 
@@ -45,7 +45,7 @@ GPIOD_API void gpiod_line_request_release(struct gpiod_line_request *request)
 	free(request);
 }
 
-GPIOD_API unsigned int
+GPIOD_API size_t
 gpiod_line_request_get_num_lines(struct gpiod_line_request *request)
 {
 	return request->num_lines;
@@ -87,7 +87,7 @@ static int offset_to_bit(struct gpiod_line_request *request,
 
 GPIOD_API int
 gpiod_line_request_get_values_subset(struct gpiod_line_request *request,
-				     unsigned num_lines,
+				     size_t num_lines,
 				     const unsigned int *offsets, int *values)
 {
 	struct gpio_v2_line_values buf;
@@ -140,7 +140,7 @@ GPIOD_API int gpiod_line_request_set_value(struct gpiod_line_request *request,
 
 GPIOD_API int
 gpiod_line_request_set_values_subset(struct gpiod_line_request *request,
-				     unsigned int num_lines,
+				     size_t num_lines,
 				     const unsigned int *offsets,
 				     const int *values)
 {
@@ -210,7 +210,7 @@ gpiod_line_request_edge_event_wait(struct gpiod_line_request *request,
 GPIOD_API int
 gpiod_line_request_edge_event_read(struct gpiod_line_request *request,
 				   struct gpiod_edge_event_buffer *buffer,
-				   unsigned int max_events)
+				   size_t max_events)
 {
 	return gpiod_edge_event_buffer_read_fd(request->fd, buffer, max_events);
 }
diff --git a/lib/request-config.c b/lib/request-config.c
index 3de1820..dd92062 100644
--- a/lib/request-config.c
+++ b/lib/request-config.c
@@ -13,8 +13,8 @@
 struct gpiod_request_config {
 	char consumer[GPIO_MAX_NAME_SIZE];
 	unsigned int offsets[GPIO_V2_LINES_MAX];
-	unsigned int num_offsets;
-	unsigned int event_buffer_size;
+	size_t num_offsets;
+	size_t event_buffer_size;
 };
 
 GPIOD_API struct gpiod_request_config *gpiod_request_config_new(void)
@@ -54,7 +54,7 @@ gpiod_request_config_get_consumer(struct gpiod_request_config *config)
 
 GPIOD_API void
 gpiod_request_config_set_offsets(struct gpiod_request_config *config,
-				 unsigned int num_offsets,
+				 size_t num_offsets,
 				 const unsigned int *offsets)
 {
 	unsigned int i;
@@ -66,7 +66,7 @@ gpiod_request_config_set_offsets(struct gpiod_request_config *config,
 		config->offsets[i] = offsets[i];
 }
 
-GPIOD_API unsigned int
+GPIOD_API size_t
 gpiod_request_config_get_num_offsets(struct gpiod_request_config *config)
 {
 	return config->num_offsets;
@@ -82,12 +82,12 @@ gpiod_request_config_get_offsets(struct gpiod_request_config *config,
 
 GPIOD_API void
 gpiod_request_config_set_event_buffer_size(struct gpiod_request_config *config,
-					   unsigned int event_buffer_size)
+					   size_t event_buffer_size)
 {
 	config->event_buffer_size = event_buffer_size;
 }
 
-GPIOD_API unsigned int
+GPIOD_API size_t
 gpiod_request_config_get_event_buffer_size(struct gpiod_request_config *config)
 {
 	return config->event_buffer_size;
diff --git a/tools/gpiodetect.c b/tools/gpiodetect.c
index 9047091..6ce3cb8 100644
--- a/tools/gpiodetect.c
+++ b/tools/gpiodetect.c
@@ -70,7 +70,7 @@ int main(int argc, char **argv)
 		if (!chip)
 			die_perror("unable to open %s", entries[i]->d_name);
 
-		printf("%s [%s] (%u lines)\n",
+		printf("%s [%s] (%zu lines)\n",
 		       gpiod_chip_get_name(chip),
 		       gpiod_chip_get_label(chip),
 		       gpiod_chip_get_num_lines(chip));
diff --git a/tools/gpioget.c b/tools/gpioget.c
index 112257c..28030fa 100644
--- a/tools/gpioget.c
+++ b/tools/gpioget.c
@@ -44,12 +44,13 @@ int main(int argc, char **argv)
 	int direction = GPIOD_LINE_DIRECTION_INPUT;
 	int optc, opti, bias = 0, ret, *values;
 	struct gpiod_request_config *req_cfg;
-	unsigned int *offsets, i, num_lines;
 	struct gpiod_line_request *request;
 	struct gpiod_line_config *line_cfg;
+	unsigned int *offsets, i;
 	struct gpiod_chip *chip;
 	bool active_low = false;
 	char *device, *end;
+	size_t num_lines;
 
 	for (;;) {
 		optc = getopt_long(argc, argv, shortopts, longopts, &opti);
diff --git a/tools/gpioinfo.c b/tools/gpioinfo.c
index 2c21474..7788468 100644
--- a/tools/gpioinfo.c
+++ b/tools/gpioinfo.c
@@ -130,7 +130,7 @@ static void list_lines(struct gpiod_chip *chip)
 	unsigned int i, offset;
 	int direction;
 
-	printf("%s - %u lines:\n",
+	printf("%s - %zu lines:\n",
 	       gpiod_chip_get_name(chip), gpiod_chip_get_num_lines(chip));
 
 	for (offset = 0; offset < gpiod_chip_get_num_lines(chip); offset++) {
diff --git a/tools/gpiomon.c b/tools/gpiomon.c
index 31ea294..2ead5c6 100644
--- a/tools/gpiomon.c
+++ b/tools/gpiomon.c
@@ -154,15 +154,15 @@ static void handle_signal(int signum UNUSED)
 
 int main(int argc, char **argv)
 {
-	unsigned int offsets[64], num_lines = 0, offset, events_wanted = 0,
-		     events_done = 0;
 	bool watch_rising = false, watch_falling = false, active_low = false;
+	size_t num_lines = 0, events_wanted = 0, events_done = 0;
 	struct gpiod_edge_event_buffer *event_buffer;
 	int optc, opti, ret, i, edge, bias = 0;
 	uint64_t timeout = 10 * 1000000000LLU;
 	struct gpiod_request_config *req_cfg;
 	struct gpiod_line_request *request;
 	struct gpiod_line_config *line_cfg;
+	unsigned int offsets[64], offset;
 	struct gpiod_edge_event *event;
 	struct gpiod_chip *chip;
 	struct mon_ctx ctx;
diff --git a/tools/gpioset.c b/tools/gpioset.c
index c27525a..3b8e34b 100644
--- a/tools/gpioset.c
+++ b/tools/gpioset.c
@@ -192,13 +192,14 @@ int main(int argc, char **argv)
 	const struct mode_mapping *mode = &modes[MODE_EXIT];
 	int ret, optc, opti, bias = 0, drive = 0, *values;
 	struct gpiod_request_config *req_cfg;
-	unsigned int *offsets, num_lines, i;
 	struct gpiod_line_request *request;
 	struct gpiod_line_config *line_cfg;
 	struct callback_data cbdata;
+	unsigned int *offsets, i;
 	struct gpiod_chip *chip;
 	bool active_low = false;
 	char *device, *end;
+	size_t num_lines;
 
 	memset(&cbdata, 0, sizeof(cbdata));
 
