contributed by < Brianpan >
要確認malloc是否成功
if (h != NULL)
INIT_LIST_HEAD(h);
移除queue的時候要連所包含的內容一起釋放
所以要使用list_for_each_safe api
插入新元素要考慮是否有成功分配空間
element_t *new_ele = malloc(sizeof(element_t));
// malloc fails
if (new_ele == NULL)
return false;
// can not dup str
char *dup_str = strdup(s);
if (dup_str == NULL) {
// free element's malloc
free(new_ele);
return false;
}
除此之外,這兩者的差別只在list_add, list_add_tail的api使用
一開始使用間接指標去memcpy 發現 case-07過不了
/* Copy element var */
void copy_to_buf(char **dst, char **src, size_t bufsize)
{
size_t end = bufsize - 1;
if (strlen(*src) >= end) {
memcpy(*dst, *src, end);
*dst[end] = '\0';
return;
}
memcpy(*dst, *src, bufsize);
}
改進後 commit 參考同學的實作改用strncpy去避免這樣的情況
if (sp) {
strncpy(sp, e->value, bufsize -1);
sp[bufsize - 1] = '\0';
}