PERFORCE change 100017 for review

John Birrell jb at FreeBSD.org
Mon Jun 26 05:10:47 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=100017

Change 100017 by jb at jb_freebsd2 on 2006/06/26 05:10:14

	Save the file name and line number where an errno value is saved for
	later reporting. Getting a good ol' Unix error message like "no such
	file" is not terribly helpful when the application is actually doing
	ioctls on a device. Grrr.

Affected files ...

.. //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_error.c#3 edit
.. //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_impl.h#9 edit

Differences ...

==== //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_error.c#3 (text) ====

@@ -139,12 +139,29 @@
 	return (dtp->dt_errno);
 }
 
+#if defined(sun)
 int
 dt_set_errno(dtrace_hdl_t *dtp, int err)
 {
 	dtp->dt_errno = err;
 	return (-1);
 }
+#else
+int
+_dt_set_errno(dtrace_hdl_t *dtp, int err, char *errfile, int errline)
+{
+	dtp->dt_errno = err;
+	dtp->dt_errfile = errfile;
+	dtp->dt_errline = errline;
+	return (-1);
+}
+
+void dt_get_errloc(dtrace_hdl_t *dtp, char **p_errfile, int *p_errline)
+{
+	*p_errfile = dtp->dt_errfile;
+	*p_errline = dtp->dt_errline;
+}
+#endif
 
 void
 dt_set_errmsg(dtrace_hdl_t *dtp, const char *errtag, const char *region,

==== //depot/projects/dtrace/src/contrib/opensolaris/lib/libdtrace/common/dt_impl.h#9 (text) ====

@@ -270,6 +270,10 @@
 	int dt_version;		/* library version requested by client */
 	int dt_ctferr;		/* error resulting from last CTF failure */
 	int dt_errno;		/* error resulting from last failed operation */
+#if !defined(sun)
+	char *dt_errfile;
+	int dt_errline;
+#endif
 	int dt_fd;		/* file descriptor for dtrace pseudo-device */
 	int dt_ftfd;		/* file descriptor for fasttrap pseudo-device */
 	int dt_fterr;		/* saved errno from failed open of dt_ftfd */
@@ -546,7 +550,13 @@
 extern char *dt_cpp_add_arg(dtrace_hdl_t *, const char *);
 extern char *dt_cpp_pop_arg(dtrace_hdl_t *);
 
+#if defined(sun)
 extern int dt_set_errno(dtrace_hdl_t *, int);
+#else
+int _dt_set_errno(dtrace_hdl_t *, int, char *, int);
+void dt_get_errloc(dtrace_hdl_t *, char **, int *);
+#define dt_set_errno(_a,_b)	_dt_set_errno(_a,_b,__FILE__,__LINE__)
+#endif
 extern void dt_set_errmsg(dtrace_hdl_t *, const char *, const char *,
     const char *, int, const char *, va_list);
 


More information about the p4-projects mailing list