home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / sysinfo-1.0 / part01 / KVM.c < prev    next >
C/C++ Source or Header  |  1993-04-10  |  3KB  |  149 lines

  1. /*
  2.  * Copyright (c) 1992 Michael A. Cooper.
  3.  * This software may be freely distributed provided it is not sold for 
  4.  * profit and the author is credited appropriately.
  5.  */
  6. #ifndef lint
  7. static char *RCSid = "$Header: /src/common/usc/bin/sysinfo/RCS/KVM.c,v 1.15 1992/04/26 23:32:06 mcooper Exp $";
  8. #endif
  9.  
  10. /*
  11.  * $Log: KVM.c,v $
  12.  * Revision 1.15  1992/04/26  23:32:06  mcooper
  13.  * Add Copyright notice
  14.  *
  15.  * Revision 1.13  1992/04/17  23:28:33  mcooper
  16.  * Fixed NULL deref bug.
  17.  *
  18.  * Revision 1.12  1992/04/17  01:07:59  mcooper
  19.  * More de-linting
  20.  *
  21.  * Revision 1.11  1992/04/16  02:25:39  mcooper
  22.  * Bug fixes, de-linting, and other changes found with CodeCenter.
  23.  *
  24.  * Revision 1.10  1992/03/31  03:10:17  mcooper
  25.  * Put frontend macro around CheckNlist() to avoid
  26.  * broken things in Ultrix.
  27.  *
  28.  * Revision 1.9  1992/03/31  02:44:20  mcooper
  29.  * Add BROKEN_NLIST_CHECK define.
  30.  *
  31.  * Revision 1.8  1992/03/31  01:54:50  mcooper
  32.  * Add CheckNlist().
  33.  *
  34.  * Revision 1.7  1992/03/31  00:34:42  mcooper
  35.  * Make GetNlName() a macro.
  36.  *
  37.  * Revision 1.6  1992/03/30  23:44:05  mcooper
  38.  * *** empty log message ***
  39.  *
  40.  */
  41.  
  42.  
  43. /*
  44.  * Frontend functions for kvm_*() functions
  45.  *
  46.  * It is assumed we HAVE_NLIST if we HAVE_KVM.
  47.  */
  48.  
  49. #include <stdio.h>
  50. #include "system.h"
  51.  
  52. #if    defined(HAVE_KVM)
  53.  
  54. #include "defs.h"
  55.  
  56. #include <fcntl.h>
  57. #if    defined(HAVE_NLIST)
  58. #include <nlist.h>
  59. #endif    /* HAVE_NLIST */
  60.  
  61. /*
  62.  * Perform a kvm_close().  Really just hear to be compatible.
  63.  */
  64. extern void KVM_close(kd)
  65.     kvm_t                *kd;
  66. {
  67.     if (kd)
  68.     (void) kvm_close(kd);
  69. }
  70.  
  71. /*
  72.  * Perform a kvm_open() and then a kvm_nlist().
  73.  */
  74. #if    defined(HAVE_NLIST)
  75. /*
  76.  * Do a kvm_open()
  77.  */
  78. extern kvm_t *KVM_open(PtrNL)
  79.     struct nlist            *PtrNL;
  80. #else
  81. etern kvm_t *KVM_open()
  82. #endif    /* HAVE_NLIST */
  83. {
  84.     kvm_t                *kd = NULL;
  85.     extern char            *ProgramName;
  86.  
  87.     if ((kd = kvm_open((char *)NULL, (char *)NULL, (char *)NULL, O_RDONLY,
  88.                ProgramName)) == NULL) {
  89.     if (Debug) Error("kvm_open failed: %s.", SYSERR);
  90.     return((kvm_t *) NULL);
  91.     }
  92.  
  93. #if    defined(HAVE_NLIST)
  94.     if (PtrNL)
  95.     if (kvm_nlist(kd, PtrNL) != 0) {
  96.         if (Debug) Error("kvm_nlist name \"%s\" failed: %s.", 
  97.                  GetNlNamePtr(PtrNL), SYSERR);
  98.         KVM_close(kd);
  99.         return((kvm_t *) NULL);
  100.     }
  101. #endif    /* HAVE_NLIST */
  102.  
  103.     return(kd);
  104. }
  105.  
  106. /*
  107.  * Perform a kvm_read().
  108.  */
  109. extern int KVM_read(kd, Addr, Buf, NumBytes)
  110.     kvm_t                *kd;
  111.     u_long             Addr;
  112.     char                *Buf;
  113.     unsigned                 NumBytes;
  114. {
  115.     int                Count;
  116.  
  117.     if (!kd)
  118.     return(-1);
  119.  
  120.     if ((Count = kvm_read(kd, Addr, Buf, NumBytes)) != NumBytes) {
  121.     if (Debug) Error("kvm_read failed (expected %d, got %d): %s.", 
  122.              NumBytes, Count, SYSERR);
  123.     return(-1);
  124.     }
  125.  
  126.     return(0);
  127. }
  128.  
  129. /*
  130.  * Check to see if PtrNL is valid.
  131.  */
  132. extern int _CheckNlist(PtrNL)
  133.     struct nlist           *PtrNL;
  134. {
  135.     /*
  136.      * Should use n_type, but that's not set
  137.      * correctly on some OS's.
  138.      */
  139.     if (!PtrNL || !PtrNL->n_value) {
  140.     if (Debug) Error("Kernel symbol \"%s\" not found.", 
  141.              GetNlNamePtr(PtrNL));
  142.     return(-1);
  143.     }
  144.  
  145.     return(0);
  146. }
  147.  
  148. #endif /* HAVE_KVM */
  149.