home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / dirs / mkid_448.lzh / Mkid / old / amiga_getenv.c next >
C/C++ Source or Header  |  1991-02-01  |  1KB  |  54 lines

  1. struct lib {
  2.     struct lib *succ, *prev;
  3.     char type, priority;
  4.     char *name;
  5.     short flags;
  6.     short negsize;
  7.     short possize;
  8.     short version;
  9.     short revision;
  10.     char *ID;
  11.     long sum;
  12.     short opencnt;
  13.     char *env;
  14. };
  15.  
  16. #define strlen __builtin_strlen
  17.  
  18. extern char *malloc(int);
  19. extern char *strchr(char *, char);
  20. extern int  strncmp(char *, char *, int);
  21. extern struct lib *OpenLibrary(char *, long);
  22. extern void CloseLibrary(struct lib *);
  23. extern void Forbid(void), Permit(void);
  24.  
  25. char *
  26. getenv(str)
  27.     char *str;
  28. {
  29.     register struct lib *lp;
  30.     register char *cp, *np;
  31.     register int i;
  32.  
  33.     if ((lp = OpenLibrary("environment", 0L)) == 0)
  34.         return(0L);
  35.     CloseLibrary(lp);
  36.     cp = lp->env;
  37.     i  = strlen(str);
  38.  
  39.     Forbid();    /* works of all access goes through Forbid() */
  40.             /* If I didn't want to be compatible with Aztec, */
  41.             /* I'd put a semaphore in the library base */
  42.     while (*cp) {
  43.      if ((np = strchr(cp, '=')) && np-cp == i && strncmp(cp, str, i) == 0) {
  44.         cp = malloc(strlen(++np)+1);
  45.         strcpy(cp, np);
  46.         Permit();
  47.         return(cp);
  48.      }
  49.      cp += strlen(cp) + 1;
  50.     }
  51.     Permit();
  52.     return(0L);
  53. }
  54.