|
|
1.1 ! root 1: /* ! 2: * Copyright (C) 2002-2005 Roman Zippel <[email protected]> ! 3: * Copyright (C) 2002-2005 Sam Ravnborg <[email protected]> ! 4: * ! 5: * Released under the terms of the GNU GPL v2.0. ! 6: */ ! 7: ! 8: #include <string.h> ! 9: #include "lkc.h" ! 10: ! 11: /* file already present in list? If not add it */ ! 12: struct file *file_lookup(const char *name) ! 13: { ! 14: struct file *file; ! 15: const char *file_name = sym_expand_string_value(name); ! 16: ! 17: for (file = file_list; file; file = file->next) { ! 18: if (!strcmp(name, file->name)) { ! 19: free((void *)file_name); ! 20: return file; ! 21: } ! 22: } ! 23: ! 24: file = malloc(sizeof(*file)); ! 25: memset(file, 0, sizeof(*file)); ! 26: file->name = file_name; ! 27: file->next = file_list; ! 28: file_list = file; ! 29: return file; ! 30: } ! 31: ! 32: /* write a dependency file as used by kbuild to track dependencies */ ! 33: int file_write_dep(const char *name) ! 34: { ! 35: struct symbol *sym, *env_sym; ! 36: struct expr *e; ! 37: struct file *file; ! 38: FILE *out; ! 39: ! 40: if (!name) ! 41: name = ".kconfig.d"; ! 42: out = fopen("..config.tmp", "w"); ! 43: if (!out) ! 44: return 1; ! 45: fprintf(out, "deps_config := \\\n"); ! 46: for (file = file_list; file; file = file->next) { ! 47: if (file->next) ! 48: fprintf(out, "\t%s \\\n", file->name); ! 49: else ! 50: fprintf(out, "\t%s\n", file->name); ! 51: } ! 52: fprintf(out, "\n%s: \\\n" ! 53: "\t$(deps_config)\n\n", conf_get_autoconfig_name()); ! 54: ! 55: expr_list_for_each_sym(sym_env_list, e, sym) { ! 56: struct property *prop; ! 57: const char *value; ! 58: ! 59: prop = sym_get_env_prop(sym); ! 60: env_sym = prop_get_symbol(prop); ! 61: if (!env_sym) ! 62: continue; ! 63: value = getenv(env_sym->name); ! 64: if (!value) ! 65: value = ""; ! 66: fprintf(out, "ifneq \"$(%s)\" \"%s\"\n", env_sym->name, value); ! 67: fprintf(out, "%s: FORCE\n", conf_get_autoconfig_name()); ! 68: fprintf(out, "endif\n"); ! 69: } ! 70: ! 71: fprintf(out, "\n$(deps_config): ;\n"); ! 72: fclose(out); ! 73: rename("..config.tmp", name); ! 74: return 0; ! 75: } ! 76: ! 77: ! 78: /* Allocate initial growable string */ ! 79: struct gstr str_new(void) ! 80: { ! 81: struct gstr gs; ! 82: gs.s = malloc(sizeof(char) * 64); ! 83: gs.len = 64; ! 84: gs.max_width = 0; ! 85: strcpy(gs.s, "\0"); ! 86: return gs; ! 87: } ! 88: ! 89: /* Allocate and assign growable string */ ! 90: struct gstr str_assign(const char *s) ! 91: { ! 92: struct gstr gs; ! 93: gs.s = strdup(s); ! 94: gs.len = strlen(s) + 1; ! 95: gs.max_width = 0; ! 96: return gs; ! 97: } ! 98: ! 99: /* Free storage for growable string */ ! 100: void str_free(struct gstr *gs) ! 101: { ! 102: if (gs->s) ! 103: free(gs->s); ! 104: gs->s = NULL; ! 105: gs->len = 0; ! 106: } ! 107: ! 108: /* Append to growable string */ ! 109: void str_append(struct gstr *gs, const char *s) ! 110: { ! 111: size_t l; ! 112: if (s) { ! 113: l = strlen(gs->s) + strlen(s) + 1; ! 114: if (l > gs->len) { ! 115: gs->s = realloc(gs->s, l); ! 116: gs->len = l; ! 117: } ! 118: strcat(gs->s, s); ! 119: } ! 120: } ! 121: ! 122: /* Append printf formatted string to growable string */ ! 123: void str_printf(struct gstr *gs, const char *fmt, ...) ! 124: { ! 125: va_list ap; ! 126: char s[10000]; /* big enough... */ ! 127: va_start(ap, fmt); ! 128: vsnprintf(s, sizeof(s), fmt, ap); ! 129: str_append(gs, s); ! 130: va_end(ap); ! 131: } ! 132: ! 133: /* Retrieve value of growable string */ ! 134: const char *str_get(struct gstr *gs) ! 135: { ! 136: return gs->s; ! 137: } ! 138:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.