#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct data {
char *name;
struct data *next;
};
static struct data *alloc_data(char *name)
{
struct data *data;
data
= calloc(1, sizeof(*data
)); if (data == NULL)
return NULL;
if (data->name == NULL)
goto err;
data->next = NULL;
return data;
err:
return NULL;
}
static void free_data(struct data *data)
{
}
static struct data *append_list(struct data *list, char *name)
{
struct data *top;
if (list == NULL) {
list = alloc_data(name);
return list;
}
top = alloc_data(name);
top->next = list;
return top;
}
static void free_list(struct data *list)
{
while (list != NULL) {
struct data *data = list->next;
free_data(list);
list = data;
}
}
static void print_list(struct data *list)
{
while (list != NULL) {
list = list->next;
}
}
int main(void)
{
struct data *list;
int i;
char *buffer;
if (buffer == NULL)
return 1;
list = NULL;
for (i = 0; i < 10; i++) {
list = append_list(list, buffer);
}
print_list(list);
free_list(list);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKc3RydWN0IGRhdGEgewogIGNoYXIgKm5hbWU7CiAgc3RydWN0IGRhdGEgKm5leHQ7Cn07CgpzdGF0aWMgc3RydWN0IGRhdGEgKmFsbG9jX2RhdGEoY2hhciAqbmFtZSkKewogIHN0cnVjdCBkYXRhICpkYXRhOwoKICBkYXRhID0gY2FsbG9jKDEsIHNpemVvZigqZGF0YSkpOwogIGlmIChkYXRhID09IE5VTEwpCiAgICByZXR1cm4gTlVMTDsKCiAgZGF0YS0+bmFtZSA9IGNhbGxvYygxLCBzdHJsZW4obmFtZSkpOwogIGlmIChkYXRhLT5uYW1lID09IE5VTEwpCiAgICBnb3RvIGVycjsKCiAgc3RyY3B5KGRhdGEtPm5hbWUsIG5hbWUpOwogIGRhdGEtPm5leHQgPSBOVUxMOwogIHJldHVybiBkYXRhOwoKIGVycjoKICBmcmVlKGRhdGEpOwogIHJldHVybiBOVUxMOwp9CgpzdGF0aWMgdm9pZCBmcmVlX2RhdGEoc3RydWN0IGRhdGEgKmRhdGEpCnsKICBmcmVlKGRhdGEtPm5hbWUpOwogIGZyZWUoZGF0YSk7Cn0KCnN0YXRpYyBzdHJ1Y3QgZGF0YSAqYXBwZW5kX2xpc3Qoc3RydWN0IGRhdGEgKmxpc3QsIGNoYXIgKm5hbWUpCnsKICBzdHJ1Y3QgZGF0YSAqdG9wOwoKICBpZiAobGlzdCA9PSBOVUxMKSB7CiAgICBsaXN0ID0gYWxsb2NfZGF0YShuYW1lKTsKICAgIHJldHVybiBsaXN0OwogIH0KCiAgdG9wID0gYWxsb2NfZGF0YShuYW1lKTsKICB0b3AtPm5leHQgPSBsaXN0OwogIHJldHVybiB0b3A7Cn0KCnN0YXRpYyB2b2lkIGZyZWVfbGlzdChzdHJ1Y3QgZGF0YSAqbGlzdCkKewogIHdoaWxlIChsaXN0ICE9IE5VTEwpIHsKICAgIHN0cnVjdCBkYXRhICpkYXRhID0gbGlzdC0+bmV4dDsKICAgIGZyZWVfZGF0YShsaXN0KTsKICAgIGxpc3QgPSBkYXRhOwogIH0KfQoKc3RhdGljIHZvaWQgcHJpbnRfbGlzdChzdHJ1Y3QgZGF0YSAqbGlzdCkKewogIHdoaWxlIChsaXN0ICE9IE5VTEwpIHsKICAgIHByaW50ZigiJXNcbiIsIGxpc3QtPm5hbWUpOwogICAgbGlzdCA9IGxpc3QtPm5leHQ7CiAgfQp9CgppbnQgbWFpbih2b2lkKQp7CiAgc3RydWN0IGRhdGEgKmxpc3Q7CiAgaW50IGk7CiAgY2hhciAqYnVmZmVyOwoKICBidWZmZXIgPSBjYWxsb2MoMSwgMTI4KTsKICBpZiAoYnVmZmVyID09IE5VTEwpCiAgICByZXR1cm4gMTsKCiAgbGlzdCA9IE5VTEw7CiAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKICAgIG1lbXNldChidWZmZXIsIDAsIDEyOCk7CiAgICBzY2FuZigiJTEyN3MiLCBidWZmZXIpOwogICAgbGlzdCA9IGFwcGVuZF9saXN0KGxpc3QsIGJ1ZmZlcik7CiAgfQoKICBwcmludF9saXN0KGxpc3QpOwoKICBmcmVlX2xpc3QobGlzdCk7CiAgZnJlZShidWZmZXIpOwoKICByZXR1cm4gMDsKfQo=