11d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich/* 21d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* proc-llist.c - Minimal linked list library 31d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* Copyright (c) 2009 Red Hat Inc., Durham, North Carolina. 41d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* All Rights Reserved. 51d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* 61d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* This software may be freely redistributed and/or modified under the 71d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* terms of the GNU General Public License as published by the Free 81d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* Software Foundation; either version 2, or (at your option) any 91d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* later version. 101d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* 111d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* This program is distributed in the hope that it will be useful, 121d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* but WITHOUT ANY WARRANTY; without even the implied warranty of 131d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 141d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* GNU General Public License for more details. 151d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* 161d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* You should have received a copy of the GNU General Public License 171d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* along with this program; see the file COPYING. If not, write to the 181d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 191d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* 201d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* Authors: 211d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich* Steve Grubb <sgrubb@redhat.com> 221d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich*/ 231d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 241d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#include "config.h" 251d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#include <stdlib.h> 261d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#include <string.h> 271d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich#include "proc-llist.h" 281d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 291d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichvoid list_create(llist *l) 301d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich{ 311d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich l->head = NULL; 321d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich l->cur = NULL; 331d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich l->cnt = 0; 341d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich} 351d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 361d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichvoid list_append(llist *l, lnode *node) 371d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich{ 381d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich lnode* newnode; 391d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 401d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich if (node == NULL || l == NULL) 411d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich return; 421d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 431d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich newnode = malloc(sizeof(lnode)); 441d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich if (newnode == NULL) 451d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich return; 461d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 471d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich newnode->ppid = node->ppid; 481d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich newnode->pid = node->pid; 491d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich newnode->uid = node->uid; 501d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich newnode->inode = node->inode; 511d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich // Take custody of the memory 521d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich newnode->cmd = node->cmd; 531d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich newnode->capabilities = node->capabilities; 541d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich newnode->bounds = node->bounds; 551d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich newnode->next = NULL; 561d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 571d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich // if we are at top, fix this up 581d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich if (l->head == NULL) 591d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich l->head = newnode; 601d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich else // Otherwise add pointer to newnode 611d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich l->cur->next = newnode; 621d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 631d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich // make newnode current 641d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich l->cur = newnode; 651d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich l->cnt++; 661d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich} 671d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 681d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichvoid list_clear(llist* l) 691d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich{ 701d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich lnode* nextnode; 711d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich register lnode* cur; 721d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 731d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich cur = l->head; 741d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich while (cur) { 751d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich nextnode=cur->next; 761d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich free(cur->cmd); 771d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich free(cur->capabilities); 781d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich free(cur->bounds); 791d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich free(cur); 801d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich cur=nextnode; 811d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich } 821d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich l->head = NULL; 831d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich l->cur = NULL; 841d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich l->cnt = 0; 851d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich} 861d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 871d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevichlnode *list_find_inode(llist *l, unsigned long i) 881d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich{ 891d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich register lnode* cur; 901d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 911d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich cur = l->head; /* start at the beginning */ 921d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich while (cur) { 931d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich if (cur->inode == i) { 941d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich l->cur = cur; 951d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich return cur; 961d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich } else 971d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich cur = cur->next; 981d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich } 991d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich return NULL; 1001d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich} 1011d1011a3c5049a7f9eef99d22f3704e4367579ccNick Kralevich 102