⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pass.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
/* $Source: /u/mark/src/pax/RCS/pass.c,v $ * * $Revision: 1.3 $ * * pass.c - handle the pass option of cpio * * DESCRIPTION * *	These functions implement the pass options in PAX.  The pass option *	copies files from one directory hierarchy to another. *  * AUTHOR * *	Mark H. Colburn, NAPS International (mark@jhereg.mn.org) * * Sponsored by The USENIX Association for public distribution.  * * Copyright (c) 1989 Mark H. Colburn. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice is duplicated in all such  * forms and that any documentation, advertising materials, and other  * materials related to such distribution and use acknowledge that the  * software was developed * by Mark H. Colburn and sponsored by The  * USENIX Association.  * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * $Log:	pass.c,v $ * Revision 1.3  89/02/12  10:29:51  mark * Fixed misspelling of Replstr *  * Revision 1.2  89/02/12  10:05:09  mark * 1.2 release fixes *  * Revision 1.1  88/12/23  18:02:20  mark * Initial revision *  */#ifndef lintstatic char *ident = "$Id: pass.c,v 1.3 89/02/12 10:29:51 mark Exp $";static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";#endif /* ! lint *//* Headers */#include "pax.h"/* pass - copy within the filesystem * * DESCRIPTION * *	Pass copies the named files from the current directory hierarchy to *	the directory pointed to by dirname. * * PARAMETERS * *	char	*dirname	- name of directory to copy named files to. * */#ifdef __STDC__    int pass(char *dirname)#else    int pass(dirname)char	*dirname;#endif{    char            name[PATH_MAX + 1];    int             fd;    Stat            sb;    while (name_next(name, &sb) >= 0 && (fd = openin(name, &sb)) >= 0) {	if (rplhead != (Replstr *)NULL) {	    rpl_name(name);	}	if (get_disposition("pass", name) || get_newname(name, sizeof(name))) {	    /* skip file... */	    if (fd) {		close(fd);	    }	    continue;	} 	if (passitem(name, &sb, fd, dirname)) {	    close(fd);	}	if (f_verbose) {	    fprintf(stderr, "%s/%s\n", dirname, name);	}    }}/* passitem - copy one file * * DESCRIPTION * *	Passitem copies a specific file to the named directory * * PARAMETERS * *	char   *from	- the name of the file to open *	Stat   *asb	- the stat block associated with the file to copy *	int	ifd	- the input file descriptor for the file to copy *	char   *dir	- the directory to copy it to * * RETURNS * * 	Returns given input file descriptor or -1 if an error occurs. * * ERRORS */#ifdef __STDC__int passitem(char *from, Stat *asb, int ifd, char *dir)#else    int passitem(from, asb, ifd, dir)char           *from;Stat           *asb;int             ifd;char           *dir;#endif{    int             ofd;    time_t          tstamp[2];    char            to[PATH_MAX + 1];    if (nameopt(strcat(strcat(strcpy(to, dir), "/"), from)) < 0) {	return (-1);    }    if (asb->sb_nlink > 1) {	linkto(to, asb);    }    if (f_link && islink(from, asb) == (Link *)NULL) {	linkto(from, asb);    }    if ((ofd = openout(to, asb, islink(to, asb), 1)) < 0) {	return (-1);    }    if (ofd > 0) {	passdata(from, ifd, to, ofd);    }    tstamp[0] = asb->sb_atime;    tstamp[1] = f_mtime ? asb->sb_mtime : time((time_t *) 0);    utime(to, tstamp);    return (ifd);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -