svn commit: r329353 - head/cddl/lib/libdtrace

Devin Teske dteske at FreeBSD.org
Fri Feb 16 04:22:30 UTC 2018


Author: dteske
Date: Fri Feb 16 04:22:29 2018
New Revision: 329353
URL: https://svnweb.freebsd.org/changeset/base/329353

Log:
  Add inline to errno.d for translating int to string
  
  Gives DTrace scripts strerror(3) functionality.
  
  Reviewed by:	markj
  Sponsored by:	Smule, Inc.
  Differential Revision:	https://reviews.freebsd.org/D14386

Modified:
  head/cddl/lib/libdtrace/errno.d

Modified: head/cddl/lib/libdtrace/errno.d
==============================================================================
--- head/cddl/lib/libdtrace/errno.d	Fri Feb 16 04:10:10 2018	(r329352)
+++ head/cddl/lib/libdtrace/errno.d	Fri Feb 16 04:22:29 2018	(r329353)
@@ -20,6 +20,7 @@
  * CDDL HEADER END
  *
  * Portions Copyright 2006-2008 John Birrell jb at freebsd.org
+ * Portions Copyright 2018 Devin Teske dteske at freebsd.org
  *
  * $FreeBSD$
  */
@@ -236,3 +237,112 @@ inline int EDIRIOCTL = -4;
 #pragma D binding "1.0" EDIRIOCTL
 inline int ERELOOKUP = -5;
 #pragma D binding "1.13" ERELOOKUP
+
+/*
+ * Error strings from <sys/errno.h>
+ */
+#pragma D binding "1.13" strerror
+inline string strerror[int errno] =
+	errno == 0 ? 			"Success" :
+	errno == EPERM ?		"Operation not permitted" :
+	errno == ENOENT ?		"No such file or directory" :
+	errno == ESRCH ?		"No such process" :
+	errno == EINTR ?		"Interrupted system call" :
+	errno == EIO ?			"Input/output error" :
+	errno == ENXIO ?		"Device not configured" :
+	errno == E2BIG ?		"Argument list too long" :
+	errno == ENOEXEC ?		"Exec format error" :
+	errno == EBADF ?		"Bad file descriptor" :
+	errno == ECHILD ?		"No child processes" :
+	errno == EDEADLK ?		"Resource deadlock avoided" :
+	errno == ENOMEM ?		"Cannot allocate memory" :
+	errno == EACCES ?		"Permission denied" :
+	errno == EFAULT ?		"Bad address" :
+	errno == ENOTBLK ?		"Block device required" :
+	errno == EBUSY ?		"Device busy" :
+	errno == EEXIST ?		"File exists" :
+	errno == EXDEV ?		"Cross-device link" :
+	errno == ENODEV ?		"Operation not supported by device" :
+	errno == ENOTDIR ?		"Not a directory" :
+	errno == EISDIR ?		"Is a directory" :
+	errno == EINVAL ?		"Invalid argument" :
+	errno == ENFILE ?		"Too many open files in system" :
+	errno == EMFILE ?		"Too many open files" :
+	errno == ENOTTY ?		"Inappropriate ioctl for device" :
+	errno == ETXTBSY ?		"Text file busy" :
+	errno == EFBIG ?		"File too large" :
+	errno == ENOSPC ?		"No space left on device" :
+	errno == ESPIPE ?		"Illegal seek" :
+	errno == EROFS ?		"Read-only filesystem" :
+	errno == EMLINK ?		"Too many links" :
+	errno == EPIPE ?		"Broken pipe" :
+	errno == EDOM ?			"Numerical argument out of domain" :
+	errno == ERANGE ?		"Result too large" :
+	errno == EAGAIN ?		"Resource temporarily unavailable" :
+	errno == EINPROGRESS ?		"Operation now in progress" :
+	errno == EALREADY ?		"Operation already in progress" :
+	errno == ENOTSOCK ?		"Socket operation on non-socket" :
+	errno == EDESTADDRREQ ?		"Destination address required" :
+	errno == EMSGSIZE ?		"Message too long" :
+	errno == EPROTOTYPE ?		"Protocol wrong type for socket" :
+	errno == ENOPROTOOPT ?		"Protocol not available" :
+	errno == EPROTONOSUPPORT ?	"Protocol not supported" :
+	errno == ESOCKTNOSUPPORT ?	"Socket type not supported" :
+	errno == EOPNOTSUPP ?		"Operation not supported" :
+	errno == EPFNOSUPPORT ?		"Protocol family not supported" :
+	errno == EAFNOSUPPORT ?		"Address family not supported by protocol family" :
+	errno == EADDRINUSE ?		"Address already in use" :
+	errno == EADDRNOTAVAIL ?	"Can't assign requested address" :
+	errno == ENETDOWN ?		"Network is down" :
+	errno == ENETUNREACH ?		"Network is unreachable" :
+	errno == ENETRESET ?		"Network dropped connection on reset" :
+	errno == ECONNABORTED ?		"Software caused connection abort" :
+	errno == ECONNRESET ?		"Connection reset by peer" :
+	errno == ENOBUFS ?		"No buffer space available" :
+	errno == EISCONN ?		"Socket is already connected" :
+	errno == ENOTCONN ?		"Socket is not connected" :
+	errno == ESHUTDOWN ?		"Can't send after socket shutdown" :
+	errno == ETOOMANYREFS ?		"Too many references: can't splice" :
+	errno == ETIMEDOUT ?		"Operation timed out" :
+	errno == ECONNREFUSED ?		"Connection refused" :
+	errno == ELOOP ?		"Too many levels of symbolic links" :
+	errno == ENAMETOOLONG ?		"File name too long" :
+	errno == EHOSTDOWN ?		"Host is down" :
+	errno == EHOSTUNREACH ?		"No route to host" :
+	errno == ENOTEMPTY ?		"Directory not empty" :
+	errno == EPROCLIM ?		"Too many processes" :
+	errno == EUSERS ?		"Too many users" :
+	errno == EDQUOT ?		"Disc quota exceeded" :
+	errno == ESTALE ?		"Stale NFS file handle" :
+	errno == EREMOTE ?		"Too many levels of remote in path" :
+	errno == EBADRPC ?		"RPC struct is bad" :
+	errno == ERPCMISMATCH ?		"RPC version wrong" :
+	errno == EPROGUNAVAIL ?		"RPC prog. not avail" :
+	errno == EPROGMISMATCH ?	"Program version wrong" :
+	errno == EPROCUNAVAIL ?		"Bad procedure for program" :
+	errno == ENOLCK ?		"No locks available" :
+	errno == ENOSYS ?		"Function not implemented" :
+	errno == EFTYPE ?		"Inappropriate file type or format" :
+	errno == EAUTH ?		"Authentication error" :
+	errno == ENEEDAUTH ?		"Need authenticator" :
+	errno == EIDRM ?		"Identifier removed" :
+	errno == ENOMSG ?		"No message of desired type" :
+	errno == EOVERFLOW ?		"Value too large to be stored in data type" :
+	errno == ECANCELED ?		"Operation canceled" :
+	errno == EILSEQ ?		"Illegal byte sequence" :
+	errno == ENOATTR ?		"Attribute not found" :
+	errno == EDOOFUS ?		"Programming error" :
+	errno == EBADMSG ?		"Bad message" :
+	errno == EMULTIHOP ?		"Multihop attempted" :
+	errno == ENOLINK ?		"Link has been severed" :
+	errno == EPROTO ?		"Protocol error" :
+	errno == ENOTCAPABLE ?		"Capabilities insufficient" :
+	errno == ECAPMODE ?		"Not permitted in capability mode" :
+	errno == ENOTRECOVERABLE ?	"State not recoverable" :
+	errno == EOWNERDEAD ?		"Previous owner died" :
+	errno == ERESTART ?		"restart syscall" :
+	errno == EJUSTRETURN ?		"don't modify regs, just return" :
+	errno == ENOIOCTL ?		"ioctl not handled by this layer" :
+	errno == EDIRIOCTL ?		"do direct ioctl in GEOM" :
+	errno == ERELOOKUP ?		"retry the directory lookup" :
+	"Unknown error";


More information about the svn-src-head mailing list