smblog.c

来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 108 行

C
108
字号
#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 + =
减小字号Ctrl + -
显示快捷键?