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

📄 putil.c

📁 Sun Solaris 10 中的 DTrace 组件的源代码。请参看: http://www.sun.com/software/solaris/observability.jsp
💻 C
字号:
/* * Copyright 2005 Sun Microsystems, Inc.  All rights reserved. * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only. * See the file usr/src/LICENSING.NOTICE in this distribution or * http://www.opensolaris.org/license/ for details. */#pragma ident	"@(#)Putil.c	1.2	01/01/29 SMI"#include <limits.h>#include <string.h>#include <stdarg.h>#include <stdio.h>#include <errno.h>#include "Pcontrol.h"#include "Putil.h"/* * Place the new element on the list prior to the existing element. */voidlist_link(void *new, void *existing){	list_t *p = new;	list_t *q = existing;	if (q) {		p->list_forw = q;		p->list_back = q->list_back;		q->list_back->list_forw = p;		q->list_back = p;	} else {		p->list_forw = p->list_back = p;	}}/* * Unchain the specified element from a list. */voidlist_unlink(void *old){	list_t *p = old;	if (p->list_forw != p) {		p->list_back->list_forw = p->list_forw;		p->list_forw->list_back = p->list_back;	}	p->list_forw = p->list_back = p;}/* * Routines to manipulate sigset_t, fltset_t, or sysset_t.  These routines * are provided as equivalents for the <sys/procfs.h> macros prfillset, * premptyset, praddset, and prdelset.  These functions are preferable * because they are not macros which rely on using sizeof (*sp), and thus * can be used to create common code to manipulate event sets.  The set * size must be passed explicitly, e.g. : prset_fill(&set, sizeof (set)); */voidprset_fill(void *sp, size_t size){	size_t i = size / sizeof (uint32_t);	while (i != 0)		((uint32_t *)sp)[--i] = (uint32_t)0xFFFFFFFF;}voidprset_empty(void *sp, size_t size){	size_t i = size / sizeof (uint32_t);	while (i != 0)		((uint32_t *)sp)[--i] = (uint32_t)0;}voidprset_add(void *sp, size_t size, uint_t flag){	if (flag - 1 < 32 * size / sizeof (uint32_t))		((uint32_t *)sp)[(flag - 1) / 32] |= 1U << ((flag - 1) % 32);}voidprset_del(void *sp, size_t size, uint_t flag){	if (flag - 1 < 32 * size / sizeof (uint32_t))		((uint32_t *)sp)[(flag - 1) / 32] &= ~(1U << ((flag - 1) % 32));}intprset_ismember(void *sp, size_t size, uint_t flag){	return ((flag - 1 < 32 * size / sizeof (uint32_t)) &&	    (((uint32_t *)sp)[(flag - 1) / 32] & (1U << ((flag - 1) % 32))));}/* * If _libproc_debug is set, printf the debug message to stderr * with an appropriate prefix. *//*PRINTFLIKE1*/voiddprintf(const char *format, ...){	if (_libproc_debug) {		va_list alist;		va_start(alist, format);		(void) fputs("libproc DEBUG: ", stderr);		(void) vfprintf(stderr, format, alist);		va_end(alist);	}}/* * Printf-style error reporting function.  This is used to supplement the error * return codes from various libproc functions with additional text.  Since we * are a library, and should not be spewing messages to stderr, we provide a * default version of this function that does nothing, but by calling this * function we allow the client program to define its own version of the * function that will interpose on our empty default.  This may be useful for * clients that wish to display such messages to the user. *//*ARGSUSED*//*PRINTFLIKE2*/voidPerror_printf(struct ps_prochandle *P, const char *format, ...){	/* nothing to do here */}

⌨️ 快捷键说明

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