<div dir="ltr"><div><div>On Sun, Sep 20, 2015 at 12:35 PM, Pranay Srivastava &lt;<a href="mailto:pranjas@gmail.com">pranjas@gmail.com</a>&gt; wrote:<br>&gt; On Sat, Sep 19, 2015 at 10:26 PM, Gunjan Mehta &lt;<a href="mailto:gunjanmehta08@gmail.com">gunjanmehta08@gmail.com</a>&gt; wrote:<br>&gt;&gt; I have a linked list like this <a href="http://pastebin.com/bwF3jLb6">http://pastebin.com/bwF3jLb6</a> . The problem i<br>&gt;&gt; am facing is i have initialized the list head and<br>&gt;&gt;  then i am doing malloc for that struct object. What i need is i want to<br>&gt;&gt; make struct abc_st *r as head of linked list and other nodes after it.<br>&gt;&gt;<br>&gt;&gt; typedef struct abc {<br>&gt;&gt; char client_id[18];<br>&gt;&gt;     char mac[18];<br>&gt;&gt;     st_list_head list;<br>&gt;&gt; }abc_st;<br>&gt;&gt;<br>&gt;&gt; abc_st* check_fields (abc_st *ptr)<br>&gt;&gt; {<br>&gt;&gt;     char cmd[500];<br>&gt;&gt;     MYSQL_RES *result;<br>&gt;&gt;     MYSQL_ROW row;<br>&gt;&gt;     int num_rows;<br>&gt;&gt;     abc_st *r=NULL,*temp=NULL;<br>&gt;<br>&gt; huh? this is initialized?<br>&gt;&gt;     INIT_LIST_HEAD(&amp;r-&gt;list);   // i have intialized the head here<br>&gt;<br>&gt;&gt;<br>&gt;&gt;     sprintf(cmd, &quot;SELECT * FROM ABCD_TABLE WHERE MAC = %.4x&quot;, ptr-&gt;mac);<br>&gt;&gt;         /* Running the sql query to check for fields with value in database<br>&gt;&gt; */<br>&gt;&gt;     if (mysql_query(abc_db.db_handle, cmd)) {<br>&gt;&gt;         num_rows = -1;<br>&gt;&gt;         goto done;<br>&gt;&gt;     }<br>&gt;&gt;     result = mysql_store_result(abc_db.db_handle);<br>&gt;&gt;     if (result == NULL) {<br>&gt;&gt;         num_rows = -1;<br>&gt;&gt;         goto done;<br>&gt;&gt;     }<br>&gt;&gt;     num_rows = mysql_num_rows(result);<br>&gt;&gt;<br>&gt;&gt;     while ((row = mysql_fetch_row(result)))<br>&gt;&gt;     {<br>&gt;&gt;         r= (abc_st *)malloc(sizeof(abc_st));<br>&gt;&gt;         memcpy(r-&gt;mac,row[1],strlen(row[1])+1);<br>&gt;&gt;         memcpy(r-&gt;client_id,row[0],strlen(row[0])+1);<br>&gt;&gt; How should i use list_add ?<br>&gt;&gt;         //list_add(struct list_head *new, struct list_head *head)<br>&gt;&gt; //prototype of list_add<br>&gt;&gt;        // list_add(&amp;temp-&gt;list,&amp;r-&gt;list);  //it will go wrong here, i want<br>&gt;&gt; to make r(structure r as head and then add other strutcure objects)<br>&gt;&gt;      //   r-&gt;link = NULL;<br>&gt;&gt;         //list_add(r, ptr);<br>&gt;&gt;<br>&gt;&gt;     }<br>&gt;&gt; done:<br>&gt;&gt;     mysql_free_result(result);<br>&gt;&gt;<br>&gt;&gt;     return r;<br>&gt;&gt;<br>&gt;&gt; }<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; _______________________________________________<br>&gt;&gt; Kernelnewbies mailing list<br>&gt;&gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>&gt;&gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>&gt;&gt;<br>&gt;<br>&gt;<br>&gt;<br>&gt; --<br>&gt;         ---P.K.S<br>&gt;<br>&gt; _______________________________________________<br>&gt; Kernelnewbies mailing list<br>&gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>&gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br><br><br>INIT_LIST_HEAD gets a struct list head * and initializes list-&gt;next &amp; list-&gt;prev.<br>Use calloc to initialize other members from struct abc.<br><br>st_list_head list;<br>I hope this will be typedef of struct list_head.<br><br>INIT_LIST_HEAD(&amp;r-&gt;list); &lt;-- This indicate r as a List Head.<br><br>Just small change you need. r remains be your list head. To add new node, create newnode of type (abc_st *) and add it in the list.<br>check the code modification which clarify you better.<br><br><br>typedef struct abc {<br>char client_id[18];<br>    char mac[18];<br>    st_list_head list;<br>}abc_st;<br><br>abc_st* check_fields (abc_st *ptr)<br>{<br>    char cmd[500];<br>    MYSQL_RES *result;<br>    MYSQL_ROW row;<br>    int num_rows;<br>    abc_st *r=NULL,*temp=NULL;<br>  <span style="color:rgb(255,0,255)"><font size="4">  abc_st *newnode = NULL;</font></span><br>    INIT_LIST_HEAD(&amp;r-&gt;list);   // i have intialized the head here<br><br>    sprintf(cmd, &quot;SELECT * FROM ABCD_TABLE WHERE MAC = %.4x&quot;, ptr-&gt;mac);<br>        /* Running the sql query to check for fields with value in database */<br>    if (mysql_query(abc_db.db_handle, cmd)) {<br>        num_rows = -1;<br>        goto done;<br>    }<br>    result = mysql_store_result(abc_db.db_handle);<br>    if (result == NULL) {<br>        num_rows = -1;<br>        goto done;<br>    }<br>    num_rows = mysql_num_rows(result);<br><br>    while ((row = mysql_fetch_row(result)))<br>    {<br> <font size="4">     <span style="color:rgb(255,0,255)">  if ((newnode = (abc_st *)calloc(sizeof(abc_st))) == NULL) {<br>            fprintf(stderr, &quot;%s\n&quot;, strerror(errno));<br>            goto done;<br>        }  <br>        memcpy(newnode-&gt;mac,row[1],strlen(row[1])+1);<br>        memcpy(newnode-&gt;client_id,row[0],strlen(row[0])+1);<br>           <br>        list_add(&amp;(newnode-&gt;list), &amp;(r-&gt;list));</span></font><br>    }<br>done:<br>    mysql_free_result(result);<br><br>    return r;<br><br>}<br><br></div>- Thanks &amp; Regards,<br></div>    PraviN<br></div>