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

📄 utils.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include <auth.h>#include "imap4d.h"/* * reverse string [s:e) in place */voidstrrev(char *s, char *e){	int c;	while(--e > s){		c = *s;		*s++ = *e;		*e = c;	}}intisdotdot(char *s){	return s[0] == '.' && s[1] == '.' && (s[2] == '/' || s[2] == '\0');}intissuffix(char *suf, char *s){	int n;	n = strlen(s) - strlen(suf);	if(n < 0)		return 0;	return strcmp(s + n, suf) == 0;}intisprefix(char *pre, char *s){	return strncmp(pre, s, strlen(pre)) == 0;}intciisprefix(char *pre, char *s){	return cistrncmp(pre, s, strlen(pre)) == 0;}char*readFile(int fd){	Dir *d;	long length;	char *s;	d = dirfstat(fd);	if(d == nil)		return nil;	length = d->length;	free(d);	s = binalloc(&parseBin, length + 1, 0);	if(s == nil || read(fd, s, length) != length)		return nil;	s[length] = '\0';	return s;}/* * create the imap tmp file. * it just happens that we don't need multiple temporary files. */intimapTmp(void){	char buf[ERRMAX], name[MboxNameLen];	int tries, fd;	snprint(name, sizeof(name), "/mail/box/%s/mbox.tmp.imp", username);	for(tries = 0; tries < LockSecs*2; tries++){		fd = create(name, ORDWR|ORCLOSE|OCEXEC, DMEXCL|0600);		if(fd >= 0)			return fd;		errstr(buf, sizeof buf);		if(cistrstr(buf, "locked") == nil)			break;		sleep(500);	}	return -1;}/* * open a file which might be locked. * if it is, spin until available */intopenLocked(char *dir, char *file, int mode){	char buf[ERRMAX];	int tries, fd;	for(tries = 0; tries < LockSecs*2; tries++){		fd = cdOpen(dir, file, mode);		if(fd >= 0)			return fd;		errstr(buf, sizeof buf);		if(cistrstr(buf, "locked") == nil)			break;		sleep(500);	}	return -1;}intfqid(int fd, Qid *qid){	Dir *d;	d = dirfstat(fd);	if(d == nil)		return -1;	*qid = d->qid;	free(d);	return 0;}ulongmapInt(NamedInt *map, char *name){	int i;	for(i = 0; map[i].name != nil; i++)		if(cistrcmp(map[i].name, name) == 0)			break;	return map[i].v;}char*estrdup(char *s){	char *t;	t = emalloc(strlen(s) + 1);	strcpy(t, s);	return t;}void*emalloc(ulong n){	void *p;	p = malloc(n);	if(p == nil)		bye("server out of memory");	return p;}void*ezmalloc(ulong n){	void *p;	p = malloc(n);	if(p == nil)		bye("server out of memory");	memset(p, 0, n);	return p;}void*erealloc(void *p, ulong n){	p = realloc(p, n);	if(p == nil)		bye("server out of memory");	return p;}

⌨️ 快捷键说明

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