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

📄 tar.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "u.h"#include "../port/lib.h"#include "mem.h"#include "dat.h"#include "fns.h"#include "io.h"#include "../port/error.h"typedef union Hblock Hblock;#define TBLOCK	512#define NAMSIZ	100union	Hblock{	char	dummy[TBLOCK];	struct	header	{		char	name[NAMSIZ];		char	mode[8];		char	uid[8];		char	gid[8];		char	size[12];		char	mtime[12];		char	chksum[8];		char	linkflag;		char	linkname[NAMSIZ];	} dbuf;};static int getdir(Hblock *hb, Dir *sp);static int checksum(Hblock *hb);uchar*tarlookup(uchar *addr, char *file, int *dlen){	Hblock *hp;	Dir dir;	hp = (Hblock*)addr;	while(getdir(hp, &dir) != 0) {		if(strcmp(file, hp->dbuf.name) == 0) {			*dlen = dir.length;			return (uchar*)(hp+1);		}		hp += (dir.length+TBLOCK-1)/TBLOCK + 1;	}	return 0;}static intgetdir(Hblock *hp, Dir *sp){	int chksum;	if (hp->dbuf.name[0] == '\0')		return 0;	sp->length = strtol(hp->dbuf.size, 0, 8);	sp->mtime = strtol(hp->dbuf.mtime, 0, 8);	chksum = strtol(hp->dbuf.chksum, 0, 8);	if (chksum != checksum(hp)) {		print("directory checksum error\n");		return 0;	}		return 1;}static intchecksum(Hblock *hp){	int i;	char *cp;	i = 0;	for (cp = hp->dummy; cp < &hp->dummy[TBLOCK]; cp++) {		if(cp < hp->dbuf.chksum || cp >= &hp->dbuf.chksum[sizeof(hp->dbuf.chksum)])			i += *cp & 0xff;		else			i += ' ' & 0xff;	}	return(i);}

⌨️ 快捷键说明

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