diff options
Diffstat (limited to 'app/proxymngr/config.c')
-rw-r--r-- | app/proxymngr/config.c | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/app/proxymngr/config.c b/app/proxymngr/config.c new file mode 100644 index 000000000..89932ce14 --- /dev/null +++ b/app/proxymngr/config.c @@ -0,0 +1,201 @@ +/* $Xorg: config.c,v 1.4 2001/02/09 02:05:34 xorgcvs Exp $ */ + +/* +Copyright 1996, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization +from The Open Group. +*/ +/* $XFree86: xc/programs/proxymngr/config.c,v 1.6 2001/01/17 23:45:02 dawes Exp $ */ + +#include <stdlib.h> + +#include "pmint.h" +#include "config.h" + +static Bool +getnextline ( +char **pbuf, +int *plen, +FILE *f) + +{ + int c, i; + + i = 0; + while(1) + { + if (i+2 > *plen) + { + if (*plen) + *plen *= 2; + else + *plen = BUFSIZ; + if (*pbuf) + *pbuf = (char *) realloc (*pbuf, *plen + 1); + else + *pbuf = (char *) malloc (*plen + 1); + if (! *pbuf) { + fprintf (stderr, "Memory allocation failure reading config file\n"); + return 0; + } + } + c = getc (f); + if (c == EOF) + break; + (*pbuf)[i++] = c; + if (c == '\n') { + i--; + break; + } + } + (*pbuf)[i] = '\0'; + return i; +} + + +#ifdef NEED_STRCASECMP +int +ncasecmp (str1, str2, n) + char *str1, *str2; + int n; +{ + char buf1[512],buf2[512]; + char c, *s; + register int i; + + for (i=0, s = buf1; i < n && (c = *str1++); i++) { + if (isupper(c)) + c = tolower(c); + if (i>510) + break; + *s++ = c; + } + *s = '\0'; + for (i=0, s = buf2; i < n && (c = *str2++); i++) { + if (isupper(c)) + c = tolower(c); + if (i>510) + break; + *s++ = c; + } + *s = '\0'; + return (strncmp(buf1, buf2, n)); +} +#endif /* NEED_STRCASECMP */ + + +Status +GetConfig ( + char *configFile, + char *serviceName, + Bool *managed, + char **startCommand, + char **proxyAddress) + +{ + FILE *fp; + int found = 0; + char *buf, *p; + int buflen, n; + + *startCommand = *proxyAddress = NULL; + + fp = fopen (configFile, "r"); + + if (!fp) + return 0; + + buf = NULL; + buflen = 0; + n = strlen (serviceName); + + while (!found && getnextline (&buf, &buflen, fp)) + { + if (buf[0] == '!') + continue; + + if (!(ncasecmp (buf, serviceName, n) == 0 && buf[n] == ' ')) + continue; + + /* found the right config line */ + p = buf + n + 1; + while (*p == ' ') + p++; + if (ncasecmp (p, "managed", 7) == 0) + { + *managed = 1; + p += 7; + } + else if (ncasecmp (p, "unmanaged", 9) == 0) + { + *managed = 0; + p += 9; + } + else + { + fprintf (stderr, "Error in config file at line \"%s\"\n", buf); + break; + } + + while (*p == ' ') + p++; + + if (*managed) + { + n = strlen (p); + *startCommand = (char *) malloc (n + 2); + if (! *startCommand) { + fprintf (stderr, + "Memory allocation failed for service \"%s\"\n", + serviceName); + break; + } + strcpy (*startCommand, p); + (*startCommand)[n] = '&'; + (*startCommand)[n + 1] = '\0'; + } + else + { + *proxyAddress = (char *) malloc (strlen (p) + 1); + if (! *proxyAddress) { + fprintf (stderr, + "Memory allocation failed for service \"%s\" at %s\n", + serviceName, p); + break; + } + strcpy (*proxyAddress, p); + } + + found = 1; + } + + if (buf) + free (buf); + + fclose (fp); + return found; +} + + + + |