int process_escape_sequence(const char *source, char *dest, int destlen)
{
	int i = 0;

	while (*source) {
		if (*source == '\\') {
			switch (*(source + 1)) {
			case 0:
				return 0;
			case '\\':
				dest[i++] = '\\';
				break;
			case 'a':
				dest[i++] = '\a';
				break;
			case 'b':
				dest[i++] = '\b';
				break;
			case 'n':
				dest[i++] = '\n';
				break;
			case 'r':
				dest[i++] = '\r';
				break;
			case 't':
				dest[i++] = '\t';
				break;
			case 'f':
				dest[i++] = '\f';
				break;
			case 'e':
				dest[i++] = 0x1b;
				break;
			case 'h':
				i += snprintf(dest + i, destlen - i, "%s", barebox_get_model());
				break;
			case 'w':
				i += snprintf(dest + i, destlen - i, "%s", getcwd());
				break;
			case '$':
				if (*(source + 2) == '?') {
					i += snprintf(dest + i, destlen - i, "%d", shell_get_last_return_code());
					source++;
					break;
				}
			default:
				dest[i++] = '\\';
				dest[i++] = *(source + 1);
			}
			source++;
		} else
			dest[i++] = *source;
		source++;
		if (!(destlen - i))
			break;
	}
	dest[i] = 0;
	return 0;
}
Example #2
0
void barebox_banner (void)
{
	pr_info("\n\n%s\n\n", version_string);
	pr_info("Board: %s\n", barebox_get_model());
}