/* Resize a proppool. Invalidates the unused value for this pool */ static struct proppool *resize_proppool(struct proppool *pool, size_t size) { struct proppool *ret; if(pool->size >= size) return pool; ret = sasl_REALLOC(pool, sizeof(struct proppool) + size); if(!ret) return NULL; ret->size = size; return ret; }
int sasl_config_init(const char *filename) { FILE *infile; int lineno = 0; int alloced = 0; char buf[4096]; char *p, *key; int result; nconfiglist=0; infile = fopen(filename, "r"); if (!infile) { return SASL_CONTINUE; } while (fgets(buf, sizeof(buf), infile)) { lineno++; if (buf[strlen(buf)-1] == '\n') buf[strlen(buf)-1] = '\0'; for (p = buf; *p && isspace((int) *p); p++); if (!*p || *p == '#') continue; key = p; while (*p && (isalnum((int) *p) || *p == '-' || *p == '_')) { if (isupper((int) *p)) *p = tolower(*p); p++; } if (*p != ':') { return SASL_FAIL; } *p++ = '\0'; while (*p && isspace((int) *p)) p++; if (!*p) { return SASL_FAIL; } if (nconfiglist == alloced) { alloced += CONFIGLISTGROWSIZE; configlist=sasl_REALLOC((char *)configlist, alloced * sizeof(struct configlist)); if (configlist==NULL) return SASL_NOMEM; } result = _sasl_strdup(key, &(configlist[nconfiglist].key), NULL); if (result!=SASL_OK) return result; result = _sasl_strdup(p, &(configlist[nconfiglist].value), NULL); if (result!=SASL_OK) return result; nconfiglist++; } fclose(infile); return SASL_OK; }