home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / sysinfo-1.0 / part01 / kernel.c < prev    next >
C/C++ Source or Header  |  1993-04-10  |  2KB  |  104 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.  
  7. #ifndef lint
  8. static char *RCSid = "$Header: /src/common/usc/bin/sysinfo/RCS/kernel.c,v 1.8 1992/04/26 23:32:06 mcooper Exp $";
  9. #endif
  10.  
  11. /*
  12.  * $Log: kernel.c,v $
  13.  * Revision 1.8  1992/04/26  23:32:06  mcooper
  14.  * Add Copyright notice
  15.  *
  16.  * Revision 1.7  1992/04/17  01:07:59  mcooper
  17.  * More de-linting
  18.  *
  19.  * Revision 1.6  1992/04/16  02:25:39  mcooper
  20.  * Bug fixes, de-linting, and other changes found with CodeCenter.
  21.  *
  22.  * Revision 1.5  1992/03/31  02:36:06  mcooper
  23.  * Change "nl" to "VersionNL".
  24.  *
  25.  * Revision 1.4  1992/03/31  01:55:17  mcooper
  26.  * Use new CheckNlist to check nlist success.
  27.  *
  28.  * Revision 1.3  1992/03/31  00:15:09  mcooper
  29.  * Add error check for nlist.n_type.
  30.  *
  31.  * Revision 1.2  1992/03/22  00:55:41  mcooper
  32.  * Use new GetNlName() to get n_name out of a struct nlist.
  33.  *
  34.  * Revision 1.1  1992/03/22  00:20:10  mcooper
  35.  * Initial revision
  36.  *
  37.  */
  38.  
  39.  
  40. /*
  41.  * Kernel related functions.
  42.  */
  43.  
  44. #include <stdio.h>
  45. #include "system.h"
  46. #include "defs.h"
  47.  
  48. #if    defined(HAVE_NLIST)
  49. #include <fcntl.h>
  50. #include <nlist.h>
  51.  
  52. struct nlist VersionNL[] = {
  53. #define     N_VERSION       0
  54. #if    defined(COFF)
  55.     { "version" },        /* 0 */
  56. #else
  57.     { "_version" },
  58. #endif    /* COFF */
  59.     { 0 },
  60. };
  61.  
  62. #if    defined(HAVE_KVM)
  63. /*
  64.  * Get kernel version string by reading the
  65.  * symbol "version" from the kernel.
  66.  */
  67. extern char *GetKernelVersionFromVersion()
  68. {
  69.     static char            Buf[BUFSIZ];
  70.     register char           *p;
  71.     kvm_t               *kd;
  72.  
  73.     if (kd = KVM_open(VersionNL)) {
  74.     /*
  75.      * See if we got a valid entry
  76.      */
  77.     if (CheckNlist(&VersionNL[N_VERSION]))
  78.         return((char *) NULL);
  79.  
  80.     if (KVM_read(kd, VersionNL[N_VERSION].n_value, (char *) Buf, 
  81.              sizeof(Buf))) {
  82.         if (Debug) Error("Read of \"%s\" from kernel failed.",
  83.                  GetNlName(VersionNL[N_VERSION]));
  84.         Buf[0] = C_NULL;
  85.     }
  86.     }
  87.  
  88.     if (kd)
  89.     KVM_close(kd);
  90.  
  91. #if    defined(KERNSTR_END)
  92.     /*
  93.      * Truncate extraneous info
  94.      */
  95.     if (Buf[0])
  96.     if ((p = index(Buf, KERNSTR_END)) != NULL)
  97.         *p = C_NULL;
  98. #endif    /* KERNSTR_END */
  99.  
  100.     return( (Buf[0]) ? Buf : (char *) NULL);
  101. }
  102. #endif    /* HAVE_KVM */
  103. #endif    /* HAVE_NLIST */
  104.