Skip to content

DragonOS Kernel Core API ​

Circular Linked List Management Functions ​

Circular linked list is one of the important data structures in the kernel. It is included in kernel/common/list.h.

void list_init(struct List *list) ​

Description ​

Initialize a List structure so that its prev and next pointers point to itself.

Parameters ​

list

The List structure to be initialized.

void list_add(struct List *entry, struct List *node) ​

Description ​

Insert the node after the entry.

Parameters ​

entry

An existing node in the circular linked list.

node

The node to be inserted.

void list_append(struct List *entry, struct List *node) ​

Description ​

Insert the node before the entry.

Parameters ​

entry

An existing node in the circular linked list.

node

The node to be inserted.

void list_del(struct List *entry) ​

Description ​

Remove the node from the list.

Parameters ​

entry

The node to be removed.

list_del_init(struct List *entry) ​

Description ​

Remove the node from the list and re-initialize the entry using list_init().

Parameters ​

entry

The node to be removed.

bool list_empty(struct List *entry) ​

Description ​

Check if the list is empty.

Parameters ​

entry

A node in the list.

struct List *list_prev(struct List *entry) ​

Description ​

Get the previous node of the entry.

Parameters ​

entry

A node in the list.

struct List *list_next(struct List *entry) ​

Description ​

Get the next node of the entry.

Parameters ​

entry

A node in the list.

void list_replace(struct List *old, struct List *new) ​

Description ​

Replace the old node in the list with the new node.

Parameters ​

old

The node to be removed.

new

The new node to be inserted into the list.

list_entry(ptr, type, member) ​

Description ​

This macro can get the address of the structure that contains the List pointed to by ptr.

Parameters ​

ptr

Pointer to the List structure.

type

The type of the structure that contains the List.

member

The name of the List structure member in the structure that contains the List.

list_first_entry(ptr, type, member) ​

Description ​

Get the first element in the list. Please note that this macro requires the list to be non-empty, otherwise it will cause an error.

Parameters ​

Same as list_entry()

list_first_entry_or_null(ptr, type, member) ​

Description ​

Get the first element in the list. If the list is empty, return NULL.

Parameters ​

Same as list_entry()

list_last_entry(ptr, type, member) ​

Description ​

Get the last element in the list. Please note that this macro requires the list to be non-empty, otherwise it will cause an error.

Parameters ​

Same as list_entry()

list_last_entry_or_full(ptr, type, member) ​

Description ​

Get the last element in the list. If the list is empty, return NULL.

Parameters ​

Same as list_entry()

list_next_entry(pos, member) ​

Description ​

Get the next element in the list.

Parameters ​

pos

Pointer to the outer structure.

member

The name of the List structure member in the outer structure.

list_prev_entry(pos, member) ​

Description ​

Get the previous element in the list.

Parameters ​

Same as list_next_entry()

list_for_each(ptr, head) ​

Description ​

Traverse the entire list (from front to back).

Parameters ​

ptr

Pointer to the List structure.

head

Pointer to the head node of the list (struct List*).

list_for_each_prev(ptr, head) ​

Description ​

Traverse the entire list (from back to front).

Parameters ​

Same as list_for_each()

list_for_each_safe(ptr, n, head) ​

Description ​

Traverse the entire list from front to back (supports deletion of the current list node).

This macro uses a temporary variable to prevent errors that may occur during iteration if the current ptr node is deleted.

Parameters ​

ptr

Pointer to the List structure.

n

Pointer to store the temporary value (List type).

head

Pointer to the head node of the list (struct List*).

list_for_each_prev_safe(ptr, n, head) ​

Description ​

Traverse the entire list from back to front (supports deletion of the current list node).

This macro uses a temporary variable to prevent errors that may occur during iteration if the current ptr node is deleted.

Parameters ​

Same as list_for_each_safe()

list_for_each_entry(pos, head, member) ​

Description ​

Iterate through the list of a given type from the beginning.

Parameters ​

pos

Pointer to a structure of the specific type.

head

Pointer to the head node of the list (struct List*).

member

The name of the List member in the structure pointed to by pos.

list_for_each_entry_reverse(pos, head, member) ​

Description ​

Iterate through the list of a given type in reverse order.

Parameters ​

Same as list_for_each_entry()

list_for_each_entry_safe(pos, n, head, member) ​

Description ​

Iterate through the list of a given type from the beginning (supports deletion of the current list node).

Parameters ​

pos

Pointer to a structure of the specific type.

n

Pointer to store the temporary value (same type as pos).

head

Pointer to the head node of the list (struct List*).

member

The name of the List member in the structure pointed to by pos.

list_prepare_entry(pos, head, member) ​

Description ​

Prepare a 'pos' structure for list_for_each_entry_continue() .

Parameters ​

pos

Pointer to a structure of the specific type, used as the starting point for iteration.

head

Pointer to the struct List structure to start iteration from.

member

The name of the List member in the structure pointed to by pos.

list_for_each_entry_continue(pos, head, member) ​

Description ​

Continue iterating through the list from the next element of the specified position.

Parameters ​

pos

Pointer to a structure of the specific type. This pointer is used as the iteration pointer.

head

Pointer to the struct List structure to start iteration from.

member

The name of the List member in the structure pointed to by pos.

list_for_each_entry_continue_reverse(pos, head, member) ​

Description ​

Iterate through the list in reverse order, starting from the previous element of the specified position.

Parameters ​

Same as list_for_each_entry_continue()

list_for_each_entry_from(pos, head, member) ​

Description ​

Continue iterating through the list from the specified position.

Parameters ​

Same as list_for_each_entry_continue()

list_for_each_entry_safe_continue(pos, n, head, member) ​

Description ​

Continue iterating through the list from the next element of the specified position (supports deletion of the current list node).

Parameters ​

pos

Pointer to a structure of the specific type. This pointer is used as the iteration pointer.

n

Pointer to store the temporary value (same type as pos).

head

Pointer to the struct List structure to start iteration from.

member

The name of the List member in the structure pointed to by pos.

list_for_each_entry_safe_continue_reverse(pos, n, head, member) ​

Description ​

Iterate through the list in reverse order, starting from the previous element of the specified position (supports deletion of the current list node).

Parameters ​

Same as list_for_each_entry_safe_continue()

list_for_each_entry_safe_from(pos, n, head, member) ​

Description ​

Continue iterating through the list from the specified position (supports deletion of the current list node).

Parameters ​

Same as list_for_each_entry_safe_continue()


Basic C Function Library ​

Kernel programming differs from application layer programming; you will not be able to use functions from LibC. To address this, the kernel implements some commonly used C language functions, trying to make their behavior as close as possible to standard C library functions. It is important to note that the behavior of these functions may differ from standard C library functions, so it is recommended to carefully read the following documentation, which will be helpful to you.

String Operations ​

int strlen(const char *s) ​

Description ​

Measure and return the length of the string.

Parameters ​

src

Source string.

long strnlen(const char *src, unsigned long maxlen) ​

Description ​

Measure and return the length of the string. If the string length is greater than maxlen, return maxlen.

Parameters ​

src

Source string.

maxlen

Maximum length.

long strnlen_user(const char *src, unsigned long maxlen) ​

Description ​

Measure and return the length of the string. If the string length is greater than maxlen, return maxlen.

This function performs address space validation, requiring the src string to be from user space. If the source string is from kernel space, it will return 0.

Parameters ​

src

Source string, located in user space.

maxlen

Maximum length.

char *strncpy(char *dst, const char *src, long count) ​

Description ​

Copy a string of count bytes and return the dst string.

Parameters ​

src

Source string.

dst

Destination string.

count

Length of the source string to copy.

char *strcpy(char *dst, const char *src) ​

Description ​

Copy the source string and return the dst string.

Parameters ​

src

Source string.

dst

Destination string.

long strncpy_from_user(char *dst, const char *src, unsigned long size) ​

Description ​

Copy a string of count bytes from user space to kernel space, and return the size of the copied string.

This function performs address space validation to prevent address space overflow issues.

Parameters ​

src

Source string.

dst

Destination string.

size

Length of the source string to copy.

int strcmp(char *FirstPart, char *SecondPart) ​

Description ​

Compare the sizes of two strings.

Return Value

SituationReturn Value
FirstPart == SecondPart0
FirstPart > SecondPart1
FirstPart < SecondPart-1
Parameters ​

FirstPart

First string.

SecondPart

Second string.

Memory Operations ​

void *memcpy(void *dst, const void *src, uint64_t size) ​

Description ​

Copy memory from src to dst.

Parameters ​

dst

Pointer to the destination address.

src

Pointer to the source address.

size

Size of data to be copied.

void *memmove(void *dst, const void *src, uint64_t size) ​

Description ​

Similar to memcpy(), but this function prevents data from being incorrectly overwritten when the source and destination memory regions overlap.

Parameters ​

dst

Pointer to the destination address.

src

Pointer to the source address.

size

Size of data to be copied.