extract.c revision 402
1238106Sdes#ifndef lint 2238106Sdesstatic const char *rcsid = "$Id: extract.c,v 1.5 1993/09/04 05:06:26 jkh Exp $"; 3238106Sdes#endif 4238106Sdes 5238106Sdes/* 6238106Sdes * FreeBSD install - a package for the installation and maintainance 7238106Sdes * of non-core utilities. 8238106Sdes * 9238106Sdes * Redistribution and use in source and binary forms, with or without 10238106Sdes * modification, are permitted provided that the following conditions 11238106Sdes * are met: 12238106Sdes * 1. Redistributions of source code must retain the above copyright 13238106Sdes * notice, this list of conditions and the following disclaimer. 14238106Sdes * 2. Redistributions in binary form must reproduce the above copyright 15238106Sdes * notice, this list of conditions and the following disclaimer in the 16238106Sdes * documentation and/or other materials provided with the distribution. 17238106Sdes * 18238106Sdes * Jordan K. Hubbard 19238106Sdes * 18 July 1993 20238106Sdes * 21238106Sdes * This is the package extraction code for the add module. 22238106Sdes * 23238106Sdes */ 24238106Sdes 25238106Sdes#include "lib.h" 26238106Sdes#include "add.h" 27238106Sdes 28238106Sdesvoid 29238106Sdesextract_plist(char *home, Package *pkg) 30238106Sdes{ 31238106Sdes PackingList p = pkg->head; 32238106Sdes char *last_file; 33238106Sdes 34238106Sdes /* Reset the world */ 35238106Sdes Owner = NULL; 36238106Sdes Group = NULL; 37238106Sdes Mode = NULL; 38238106Sdes last_file = NULL; 39238106Sdes Directory = home; 40238106Sdes 41238106Sdes /* Do it */ 42238106Sdes while (p) { 43238106Sdes switch(p->type) { 44238106Sdes case PLIST_NAME: 45238106Sdes PkgName = p->name; 46238106Sdes if (Verbose) 47238106Sdes printf("extract: Package name is %s\n", p->name); 48238106Sdes break; 49238106Sdes 50238106Sdes case PLIST_FILE: 51238106Sdes last_file = p->name; 52238106Sdes if (Verbose) 53238106Sdes printf("extract: %s/%s\n", Directory, p->name); 54238106Sdes if (!Fake) { 55238106Sdes char try[FILENAME_MAX]; 56238106Sdes 57238106Sdes /* first try to rename it into place */ 58238106Sdes sprintf(try, "%s/%s", Directory, p->name); 59238106Sdes if (rename(p->name, try) == FAIL) 60238106Sdes copy_hierarchy(Directory, p->name, TRUE); 61238106Sdes apply_perms(Directory, p->name); 62238106Sdes } 63238106Sdes break; 64238106Sdes 65238106Sdes case PLIST_CWD: 66238106Sdes if (Verbose) 67238106Sdes printf("extract: CWD to %s\n", p->name); 68238106Sdes if (strcmp(p->name, ".")) { 69238106Sdes if (!Fake && make_hierarchy(p->name) == FAIL) 70238106Sdes barf("Unable make directory '%s'.", p->name); 71238106Sdes Directory = p->name; 72238106Sdes } 73238106Sdes else 74238106Sdes Directory = home; 75238106Sdes break; 76238106Sdes 77238106Sdes case PLIST_CMD: 78238106Sdes if (Verbose) 79238106Sdes printf("extract: exec cmd '%s' (lastfile = %s)\n", p->name, 80238106Sdes last_file); 81238106Sdes if (!Fake && vsystem(p->name, Directory, last_file)) 82238106Sdes whinge("Command '%s' failed.", p->name); 83238106Sdes break; 84238106Sdes 85238106Sdes case PLIST_CHMOD: 86238106Sdes Mode = p->name; 87238106Sdes break; 88238106Sdes 89238106Sdes case PLIST_CHOWN: 90238106Sdes Owner = p->name; 91238106Sdes break; 92238106Sdes 93238106Sdes case PLIST_CHGRP: 94238106Sdes Group = p->name; 95238106Sdes break; 96238106Sdes 97238106Sdes case PLIST_COMMENT: 98238106Sdes break; 99238106Sdes 100238106Sdes case PLIST_IGNORE: 101238106Sdes p = p->next; 102238106Sdes break; 103238106Sdes } 104238106Sdes p = p->next; 105238106Sdes } 106238106Sdes} 107238106Sdes