Différence entre LIST_HEAD_INIT et INIT_LIST_HEAD

J'essaie de comprendre le noyau Linux liste liée de l'API.

Selon Le Noyau Linux Liste Liée je doit initialiser la liste de la tête par INIT_LIST_HEAD mais ici (Noyau Linux Programme) il est suggéré d'utiliser LIST_HEAD_INIT à la place.

Voici un code qui fonctionne, j'ai écrit, mais je ne sais pas si je l'ai fait de façon appropriée. Quelqu'un pourrait-il vérifier que c'est OK?

#include <stdio.h>
#include <stdlib.h>
#include "list.h"

typedef struct edge_attr {
        int d;
        struct list_head list;
} edge_attributes_t;

typedef struct edge {
        int id;
        edge_attributes_t *attributes;
} edge_t;

int main () {
        int i;
        struct list_head *pos;
        edge_attributes_t *elem;
        edge_t *a = (edge_t*)malloc(sizeof(edge_t));

        a->id = 12;
        a->attributes = (edge_attributes_t*) malloc(sizeof(edge_attributes_t));

        INIT_LIST_HEAD(&a->attributes->list);

        for (i=0; i<5; ++i) {
                elem = (edge_attributes_t*)malloc(sizeof(edge_attributes_t));
                elem->d = i;
                list_add(&elem->list, &a->attributes->list);
        }

        list_for_each(pos, &(a->attributes->list)) {
                elem = list_entry(pos, edge_attributes_t, list);
                printf("%d \n", elem->d);
        }

        return 0;
}
  • ou maby a->atrributs doit être juste en tête de liste, pas une entrée de la liste?
InformationsquelleAutor patseb | 2012-04-21