1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * CDDL HEADER START 3*7c478bd9Sstevel@tonic-gate * 4*7c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*7c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*7c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*7c478bd9Sstevel@tonic-gate * with the License. 8*7c478bd9Sstevel@tonic-gate * 9*7c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*7c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*7c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 12*7c478bd9Sstevel@tonic-gate * and limitations under the License. 13*7c478bd9Sstevel@tonic-gate * 14*7c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*7c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*7c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*7c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*7c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*7c478bd9Sstevel@tonic-gate * 20*7c478bd9Sstevel@tonic-gate * CDDL HEADER END 21*7c478bd9Sstevel@tonic-gate */ 22*7c478bd9Sstevel@tonic-gate /* 23*7c478bd9Sstevel@tonic-gate * Copyright (c) 1994, by Sun Microsytems, Inc. 24*7c478bd9Sstevel@tonic-gate */ 25*7c478bd9Sstevel@tonic-gate 26*7c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 27*7c478bd9Sstevel@tonic-gate 28*7c478bd9Sstevel@tonic-gate /* 29*7c478bd9Sstevel@tonic-gate * Error code manipulation routines 30*7c478bd9Sstevel@tonic-gate */ 31*7c478bd9Sstevel@tonic-gate 32*7c478bd9Sstevel@tonic-gate #include <string.h> 33*7c478bd9Sstevel@tonic-gate #include <libintl.h> 34*7c478bd9Sstevel@tonic-gate #include <errno.h> 35*7c478bd9Sstevel@tonic-gate 36*7c478bd9Sstevel@tonic-gate #include "tnfctl_int.h" 37*7c478bd9Sstevel@tonic-gate #include "dbg.h" 38*7c478bd9Sstevel@tonic-gate 39*7c478bd9Sstevel@tonic-gate #if !defined(TEXT_DOMAIN) 40*7c478bd9Sstevel@tonic-gate #define TEXT_DOMAIN "SYS_TEST" 41*7c478bd9Sstevel@tonic-gate #endif 42*7c478bd9Sstevel@tonic-gate 43*7c478bd9Sstevel@tonic-gate 44*7c478bd9Sstevel@tonic-gate /* 45*7c478bd9Sstevel@tonic-gate * tnfctl_strerror() - this routine returns a pointer to a static string 46*7c478bd9Sstevel@tonic-gate * describing the error argument. 47*7c478bd9Sstevel@tonic-gate */ 48*7c478bd9Sstevel@tonic-gate const char * 49*7c478bd9Sstevel@tonic-gate tnfctl_strerror(tnfctl_errcode_t prexstat) 50*7c478bd9Sstevel@tonic-gate { 51*7c478bd9Sstevel@tonic-gate switch (prexstat) { 52*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_NONE: 53*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Success")); 54*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_ACCES: 55*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Permission denied")); 56*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_NOTARGET: 57*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Target process finished")); 58*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_ALLOCFAIL: 59*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Memory allocation failed")); 60*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_INTERNAL: 61*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Internal error")); 62*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_SIZETOOSMALL: 63*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Requested size too small")); 64*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_SIZETOOBIG: 65*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Requested size too big")); 66*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_BADARG: 67*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Bad input argument")); 68*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_NOTDYNAMIC: 69*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Not a dynamic executable")); 70*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_NOLIBTNFPROBE: 71*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, 72*7c478bd9Sstevel@tonic-gate "No libtnfprobe linked in target")); 73*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_BUFEXISTS: 74*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Buffer already exists")); 75*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_NOBUF: 76*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "No buffer exists")); 77*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_BADDEALLOC: 78*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Can't deallocate buffer when " 79*7c478bd9Sstevel@tonic-gate "tracing is active")); 80*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_NOPROCESS: 81*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Process not found")); 82*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_FILENOTFOUND: 83*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "No such file")); 84*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_BUSY: 85*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, 86*7c478bd9Sstevel@tonic-gate "Device busy - kernel or process already tracing")); 87*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_INVALIDPROBE: 88*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "Invalid probe specified")); 89*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_USR1: 90*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "User error 1")); 91*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_USR2: 92*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "User error 2")); 93*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_USR3: 94*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "User error 3")); 95*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_USR4: 96*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "User error 4")); 97*7c478bd9Sstevel@tonic-gate case TNFCTL_ERR_USR5: 98*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, "User error 5")); 99*7c478bd9Sstevel@tonic-gate default: 100*7c478bd9Sstevel@tonic-gate return (dgettext(TEXT_DOMAIN, 101*7c478bd9Sstevel@tonic-gate "Unknown libtnfctl.so error code")); 102*7c478bd9Sstevel@tonic-gate } 103*7c478bd9Sstevel@tonic-gate } 104*7c478bd9Sstevel@tonic-gate 105*7c478bd9Sstevel@tonic-gate /* 106*7c478bd9Sstevel@tonic-gate * prb_map_to_errocde() - this routine returns maps an internal error code 107*7c478bd9Sstevel@tonic-gate * to a tnfctl_errcode_t 108*7c478bd9Sstevel@tonic-gate */ 109*7c478bd9Sstevel@tonic-gate tnfctl_errcode_t 110*7c478bd9Sstevel@tonic-gate _tnfctl_map_to_errcode(prb_status_t prbstat) 111*7c478bd9Sstevel@tonic-gate { 112*7c478bd9Sstevel@tonic-gate tnfctl_errcode_t err = TNFCTL_ERR_INTERNAL; 113*7c478bd9Sstevel@tonic-gate 114*7c478bd9Sstevel@tonic-gate if (prbstat >= PRB_STATUS_MINERRNO && 115*7c478bd9Sstevel@tonic-gate prbstat <= PRB_STATUS_MAXERRNO) { 116*7c478bd9Sstevel@tonic-gate if (prbstat == ENOENT) 117*7c478bd9Sstevel@tonic-gate err = TNFCTL_ERR_FILENOTFOUND; 118*7c478bd9Sstevel@tonic-gate else if (prbstat == ESRCH) 119*7c478bd9Sstevel@tonic-gate err = TNFCTL_ERR_NOPROCESS; 120*7c478bd9Sstevel@tonic-gate else if (prbstat == EACCES) 121*7c478bd9Sstevel@tonic-gate err = TNFCTL_ERR_ACCES; 122*7c478bd9Sstevel@tonic-gate else if (prbstat == EBUSY) 123*7c478bd9Sstevel@tonic-gate err = TNFCTL_ERR_BUSY; 124*7c478bd9Sstevel@tonic-gate } else { 125*7c478bd9Sstevel@tonic-gate if (prbstat == PRB_STATUS_OK) 126*7c478bd9Sstevel@tonic-gate err = TNFCTL_ERR_NONE; 127*7c478bd9Sstevel@tonic-gate else if (prbstat == PRB_STATUS_ALLOCFAIL) 128*7c478bd9Sstevel@tonic-gate err = TNFCTL_ERR_ALLOCFAIL; 129*7c478bd9Sstevel@tonic-gate } 130*7c478bd9Sstevel@tonic-gate 131*7c478bd9Sstevel@tonic-gate return (err); 132*7c478bd9Sstevel@tonic-gate } 133*7c478bd9Sstevel@tonic-gate 134*7c478bd9Sstevel@tonic-gate /* 135*7c478bd9Sstevel@tonic-gate * tnfctl_status_map() - this routine converts an errno value into a 136*7c478bd9Sstevel@tonic-gate * tnfctl_errcode_t 137*7c478bd9Sstevel@tonic-gate */ 138*7c478bd9Sstevel@tonic-gate tnfctl_errcode_t 139*7c478bd9Sstevel@tonic-gate tnfctl_status_map(int val) 140*7c478bd9Sstevel@tonic-gate { 141*7c478bd9Sstevel@tonic-gate tnfctl_errcode_t err = TNFCTL_ERR_INTERNAL; 142*7c478bd9Sstevel@tonic-gate 143*7c478bd9Sstevel@tonic-gate if (val == ENOENT) 144*7c478bd9Sstevel@tonic-gate err = TNFCTL_ERR_FILENOTFOUND; 145*7c478bd9Sstevel@tonic-gate else if (val == ESRCH) 146*7c478bd9Sstevel@tonic-gate err = TNFCTL_ERR_NOPROCESS; 147*7c478bd9Sstevel@tonic-gate else if (val == EACCES) 148*7c478bd9Sstevel@tonic-gate err = TNFCTL_ERR_ACCES; 149*7c478bd9Sstevel@tonic-gate else if (val == EBUSY) 150*7c478bd9Sstevel@tonic-gate err = TNFCTL_ERR_BUSY; 151*7c478bd9Sstevel@tonic-gate 152*7c478bd9Sstevel@tonic-gate return (err); 153*7c478bd9Sstevel@tonic-gate } 154