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

📄 smblog.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "headers.h"static QLock logreflock, logprintlock;static int locked;voidsmbloglock(void){	qlock(&logreflock);	if (locked++ == 0)		qlock(&logprintlock);	qunlock(&logreflock);}voidsmblogunlock(void){	qlock(&logreflock);	if (locked && --locked == 0)		qunlock(&logprintlock);	qunlock(&logreflock);}static intsmbloglockedvprint(char *fmt, va_list ap){	if (smbglobals.log.fd >= 0)		vfprint(smbglobals.log.fd, fmt, ap);	if (smbglobals.log.print)		vfprint(2, fmt, ap);	return 0;}intsmblogvprint(int cmd, char *fmt, va_list ap){	if (cmd < 0 || smboptable[cmd].debug) {		smbloglock();		smbloglockedvprint(fmt, ap);		smblogunlock();	}	return 0;}intsmblogprint(int cmd, char *fmt, ...){	if (cmd < 0 || smboptable[cmd].debug) {		va_list ap;		va_start(ap, fmt);		smblogvprint(cmd, fmt, ap);		va_end(ap);	}	return 0;}intsmblogprintif(int v, char *fmt, ...){	if (v) {		va_list ap;		va_start(ap, fmt);		smbloglock();		smbloglockedvprint(fmt, ap);		smblogunlock();		va_end(ap);	}	return 0;}voidsmblogdata(int cmd, int (*print)(int cmd, char *fmt, ...), void *ap, long n, long limit){	uchar *p = ap;	long i;	long saven;	i = 0;	saven = n;	if (saven > limit)		n = limit;	while (i < n) {		int l = n - i < 16 ? n - i : 16;		int b;		(*print)(cmd, "0x%.4lux  ", i);		for (b = 0; b < l; b += 2) {			(*print)(cmd, " %.2ux", p[i + b]);			if (b < l - 1)				(*print)(cmd, "%.2ux", p[i + b + 1]);			else				(*print)(cmd, "  ");		}		while (b < 16) {			(*print)(cmd, "     ");			b += 2;		}		(*print)(cmd, "        ");		for (b = 0; b < l; b++)			if (p[i + b] >= ' ' && p[i + b] <= '~')				(*print)(cmd, "%c", p[i + b]);			else				(*print)(cmd, ".");		(*print)(cmd, "\n");		i += l;	}	if (saven > limit)		(*print)(cmd, "0x%.4ux   ...\n0x%.4ux\n", limit, saven);}

⌨️ 快捷键说明

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