Commit 08c372e7 authored by Kevin Wolf's avatar Kevin Wolf
Browse files

servmgr: $ROOT-Variable in cmd erlauben

+ servmgr: $ROOT in Befehlszeilen durch das Rootverzeichnis ersetzen
* root-cdrom: $ROOT benutzen statt hartkodiertem Pfad. Dadurch reicht
  es, in GRUB den Modulparameter zu aendern, wenn man mal nicht von
  Secondary Master booten will
parent 82c6258b
No related merge requests found
Showing with 49 additions and 1 deletion
+49 -1
/modules/file mount file:/ ata:/atapi10|iso9660:/
/modules/file mount file:/ $ROOT
......@@ -47,6 +47,52 @@
static list_t* config_list;
char* full_config_path;
/**
* Alle Vorkommen von einer Zeichenkette in einem gegebenen Puffer ersetzen.
*
* Der alte Puffer muss per malloc alloziert worden sein und wird freigegeben.
* Dafuer wird ein neuer Puffer mit der neuen Stringlaenge alloziert.
*/
static void buffer_replace(char** buf, const char* search, const char* replace)
{
size_t len, i, j;
size_t search_len = strlen(search);
size_t replace_len = strlen(replace);
char* old = *buf;
char* new;
int found = 0;
for (i = 0; i < strlen(old); i++) {
if (!strncmp(old + i, search, search_len)) {
len += replace_len;
i += search_len - 1;
found = 1;
} else {
len++;
}
}
if (!found) {
return;
}
new = malloc(len + 1);
new[len] = '\0';
for (i = 0, j = 0; i < strlen(old); i++) {
if (!strncmp(old + i, search, search_len)) {
memcpy(new + j, replace, replace_len);
j += replace_len;
i += search_len - 1;
} else {
new[j] = old[i];
j++;
}
}
free(old);
*buf = new;
}
/**
* Dateiinhalt auslesen und den Angegebenen Pointer auf einen Buffer mit dem
* Inhalt setzen. Wenn die Datei nicht geoeffnet werden konnte, wird er auf
......@@ -76,6 +122,8 @@ static void config_read_file(const char* path, char** ptr)
*ptr = strdup(buffer);
assert(*ptr != NULL);
buffer_replace(ptr, "$ROOT", root_dir);
fclose(f);
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment