Home | History | Annotate | Download | only in utils
      1 /*
      2 * proc-llist.c - Minimal linked list library
      3 * Copyright (c) 2009 Red Hat Inc., Durham, North Carolina.
      4 * All Rights Reserved.
      5 *
      6 * This software may be freely redistributed and/or modified under the
      7 * terms of the GNU General Public License as published by the Free
      8 * Software Foundation; either version 2, or (at your option) any
      9 * later version.
     10 *
     11 * This program is distributed in the hope that it will be useful,
     12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14 * GNU General Public License for more details.
     15 *
     16 * You should have received a copy of the GNU General Public License
     17 * along with this program; see the file COPYING. If not, write to the
     18 * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
     19 *
     20 * Authors:
     21 *   Steve Grubb <sgrubb (at) redhat.com>
     22 */
     23 
     24 #include "config.h"
     25 #include <stdlib.h>
     26 #include <string.h>
     27 #include "proc-llist.h"
     28 
     29 void list_create(llist *l)
     30 {
     31 	l->head = NULL;
     32 	l->cur = NULL;
     33 	l->cnt = 0;
     34 }
     35 
     36 void list_append(llist *l, lnode *node)
     37 {
     38 	lnode* newnode;
     39 
     40 	if (node == NULL || l == NULL)
     41 		return;
     42 
     43 	newnode = malloc(sizeof(lnode));
     44 	if (newnode == NULL)
     45 		return;
     46 
     47 	newnode->ppid = node->ppid;
     48 	newnode->pid = node->pid;
     49 	newnode->uid = node->uid;
     50 	newnode->inode = node->inode;
     51 	// Take custody of the memory
     52 	newnode->cmd = node->cmd;
     53 	newnode->capabilities = node->capabilities;
     54 	newnode->bounds = node->bounds;
     55 	newnode->next = NULL;
     56 
     57 	// if we are at top, fix this up
     58 	if (l->head == NULL)
     59 		l->head = newnode;
     60 	else	// Otherwise add pointer to newnode
     61 		l->cur->next = newnode;
     62 
     63 	// make newnode current
     64 	l->cur = newnode;
     65 	l->cnt++;
     66 }
     67 
     68 void list_clear(llist* l)
     69 {
     70 	lnode* nextnode;
     71 	register lnode* cur;
     72 
     73 	cur = l->head;
     74 	while (cur) {
     75 		nextnode=cur->next;
     76 		free(cur->cmd);
     77 		free(cur->capabilities);
     78 		free(cur->bounds);
     79 		free(cur);
     80 		cur=nextnode;
     81 	}
     82 	l->head = NULL;
     83 	l->cur = NULL;
     84 	l->cnt = 0;
     85 }
     86 
     87 lnode *list_find_inode(llist *l, unsigned long i)
     88 {
     89         register lnode* cur;
     90 
     91        	cur = l->head;	/* start at the beginning */
     92 	while (cur) {
     93 		if (cur->inode == i) {
     94 			l->cur = cur;
     95 			return cur;
     96 		} else
     97 			cur = cur->next;
     98 	}
     99 	return NULL;
    100 }
    101 
    102