|
|
1.1 ! root 1: /* ! 2: * File: rsys.c ! 3: * Contents: getstr, host, putstr ! 4: */ ! 5: ! 6: #include "../h/rt.h" ! 7: ! 8: /* ! 9: * getstr - read a line into buf from file fd. At most maxi characters ! 10: * are read. getstr returns the length of the line, not counting ! 11: * the newline. ! 12: */ ! 13: ! 14: getstr(buf, maxi, fd) ! 15: register char *buf; ! 16: int maxi; ! 17: FILE *fd; ! 18: { ! 19: register int c, l; ! 20: ! 21: l = 0; ! 22: while ((c = getc(fd)) != '\n') { ! 23: if (c == EOF) ! 24: if (l > 0) return l; ! 25: else return -1; ! 26: *buf++ = c; ! 27: if (++l >= maxi) ! 28: break; ! 29: } ! 30: return l; ! 31: } ! 32: ! 33: ! 34: #ifdef UtsName ! 35: #include <sys/utsname.h> ! 36: #endif UtsName ! 37: ! 38: /* ! 39: * iconhost - return some sort of host name into the buffer pointed at ! 40: * by hostname. This code accommodates several different host name ! 41: * fetching schemes. ! 42: */ ! 43: iconhost(hostname) ! 44: char *hostname; ! 45: { ! 46: #ifdef WhoHost ! 47: /* ! 48: * The host name is in /usr/include/whoami.h. (V7, 4.[01]bsd) ! 49: */ ! 50: whohost(hostname); ! 51: #endif WhoHost ! 52: ! 53: #ifdef UtsName ! 54: { ! 55: /* ! 56: * Use the uname system call. (System III & V) ! 57: */ ! 58: struct utsname uts; ! 59: uname(&uts); ! 60: strcpy(hostname,uts.nodename); ! 61: } ! 62: #endif UtsName ! 63: ! 64: #ifdef GetHost ! 65: /* ! 66: * Use the gethostname system call. (4.2bsd) ! 67: */ ! 68: gethostname(hostname,MaxCvtLen); ! 69: #endif GetHost ! 70: ! 71: #ifdef VMS ! 72: /* ! 73: * VMS has its own special logic ! 74: */ ! 75: char *h; ! 76: if (!(h = getenv("ICON$HOST")) && !(h = getenv("SYS$NODE"))) ! 77: h = "VAX/VMS"; ! 78: strcpy(hostname,h); ! 79: #endif VMS ! 80: ! 81: #ifdef HostStr ! 82: /* ! 83: * The string constant HostStr contains the host name. ! 84: */ ! 85: strcpy(hostname,HostStr); ! 86: #endif HostStr ! 87: } ! 88: ! 89: #ifdef WhoHost ! 90: #define HdrFile "/usr/include/whoami.h" ! 91: /* ! 92: * whohost - look for a line of the form ! 93: * #define sysname "name" ! 94: * in HdrFile and return the name. ! 95: */ ! 96: whohost(hostname) ! 97: char *hostname; ! 98: { ! 99: char buf[BUFSIZ]; ! 100: FILE *fd; ! 101: ! 102: fd = fopen(HdrFile, "r"); ! 103: if (fd == NULL) { ! 104: sprintf(buf, "Cannot open %s, no value for &host\n", HdrFile); ! 105: syserr(buf); ! 106: } ! 107: #ifndef VMS ! 108: setbuf(fd,NULL); ! 109: #endif VMS ! 110: ! 111: for (;;) { /* each line in the file */ ! 112: if (fgets(buf, sizeof buf, fd) == NULL) { ! 113: sprintf(buf, "No #define for sysname in %s, no value for &host\n", HdrFile); ! 114: syserr(buf); ! 115: } ! 116: if (sscanf(buf,"#define sysname \"%[^\"]\"", hostname) == 1) { ! 117: fclose(fd); ! 118: return; ! 119: } ! 120: } ! 121: } ! 122: #endif WhoHost ! 123: ! 124: ! 125: /* ! 126: * Print l characters starting at s on file f. ! 127: */ ! 128: ! 129: putstr(f, s, l) ! 130: register FILE *f; ! 131: register char *s; ! 132: register word l; ! 133: { ! 134: while (l--) ! 135: putc(*s++, f); ! 136: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.