Exemple #1
0
static struct dirent *get_dirent(char *filepath, struct fat_part_desc *desc,
        int current_cluster, int dircount)
{
    struct dirent *dir, *ret;
    char cl[desc->bootrecord.spc * desc->bootrecord.bps];
    char *ptr, *name;

    name = filepath + 1;
    ptr = kstrchr(name, '/');
    while (ptr != NULL) {
        *ptr = 0;
        dir = search_dir(name, desc, current_cluster, dircount, cl);
        if (dir != NULL) {
            name = ptr + 1;
            *ptr = '/';
            ptr = kstrchr(name, '/');
            current_cluster = (dir->cluster_hi << 16) | dir->cluster_lo;
        } else {
            /* file does not exist! */
            *ptr = '/';
            return 0;
        }
    }
    /* check current directory for 'name' */
    dir = search_dir(name, desc, current_cluster, dircount, cl);
    if (dir == NULL)
        return NULL;
    ret = kmalloc(sizeof(struct dirent));
    kmemcpy(ret, dir, sizeof(struct dirent));

    return ret;
}
Exemple #2
0
static char *get_filename(struct dirent *d, char buffer[255])
{
    int i, ret = 0;
    char *ptr;
    struct dirent_long *dl = (struct dirent_long *)d;

    /* make sure we actually have long entries */
    if ((dl - 1)->attr != DENT_LONG) {
        kstrcpy(buffer, d->filename);
        if ((ptr = kstrchr(buffer, 0x20)) < &buffer[10])
            *ptr = 0;
        return buffer;
    }

    do {
        --dl;
        for (i = 0; i < 5 && dl->filename_1[i] != 0; ++i)
            buffer[ret++] = (char)dl->filename_1[i];
        if (i < 5 && dl->filename_1[i] == 0)
            break;
        for (i = 0; i < 6 && dl->filename_2[i] != 0; ++i)
            buffer[ret++] = (char)dl->filename_2[i];
        if (i < 6 && dl->filename_2[i] == 0)
            break;
        for (i = 0; i < 2 && dl->filename_3[i] != 0; ++i)
            buffer[ret++] = (char)dl->filename_3[i];
        if (i < 2 && dl->filename_2[i] == 0)
            break;
    } while (!(dl->order & 0x40));

    buffer[ret] = 0;
    return buffer;
}
Exemple #3
0
int vt100_parse(const char* vt100_seq)
{
#ifdef VT100_SUPPORT
	char* s = (char *)vt100_seq;
	char *last, *q;
	int val, bright = 0, back, fore;

	/* is valid esc seq ? */
	if (*(unsigned short*)s != 0x5b1b) return 0;

	s += 2;

	for(;;) {
		last = 0; q = 0;
		if ((q = kstrchr(s, ';')) || (last = kstrchr(s, 'm'))) {
			val = atoi(s);
			if (val == 0 && last) {
				/* reset */
				console_unset_char_color();
				return sz_reset_seq;
			}
			if (val < 10) {
				/*  attr */
				if (val == 1) bright = 1;
			} else if (val >=30 && val <= 39) {
				/* fore */
				fore = val;
			} else {
				back = val;
			}

			if (last) {
				set_terminal_color(fore, back, bright);
				return ((last + 1) - vt100_seq);
			} else {
				s = q + 1;
			}
		}
		else {
			/* invalid seq */
			return 0;
		}
	}
#else
	return 0;
#endif
}
int		countwords(char *s, char *sep)
{
    int		i;
    int		words;

    words = 0;
    i = 0;
    while (s[i])
    {
        if (i == 0 && !(kstrchr(sep, s[i])))
            words++;
        else if (i > 0 && !(kstrchr(sep, s[i])) && kstrchr(sep, s[i - 1]))
            words++;
        i++;
    }
    return (words);
}
Exemple #5
0
/* supported formats: %%, %d, %u, %x, %p, %s, %c
 * TODO:
 *  - return number of bytes copied into 'str' */
int kvsprintf(char *str, const char *fmt, va_list ap)
{
    char *ptr, *stmp;
    unsigned utmp;
    int itmp;
    char ctmp;

    for (; *fmt; fmt = ptr + 2) {
        ptr = kstrchr(fmt, '%');
        if (ptr == NULL) {
            kstrcpy(str, fmt);
            return 1;
        }

        str += kstrncpy(str, fmt, (int)ptr - (int)fmt);

        switch (*(ptr + 1)) {
            case 'd': /* signed int */
                itmp = va_arg(ap, int);
                str = sitoa(str, itmp);
                break;
            case 'u': /* unsigned int */
                utmp = va_arg(ap, unsigned);
                str = uitoa(str, utmp);
                break;
            case 'p': /* pointer */
                *str++ = '0';
                *str++ = 'x';
            case 'x': /* hex */
                utmp = va_arg(ap, unsigned);
                str = htoa(str, utmp);
                break;
            case 's': /* string */
                stmp = va_arg(ap, char *);
                str += kstrcpy(str, stmp);
                break;
            case '%':
                *str++ = '%';
                break;
            case 'c':
                ctmp = va_arg(ap, int);
                *str++ = ctmp;
                break;
            default:
                /* unsupported format */
                break;
        }
    }

    return 1;
}
Exemple #6
0
int kstrcspn(char* str1, char* str2)
{
	int i = 0;
	int len = 0;
	if (!str1 || !str2) return -1;
	len = kstrlen(str1);
	while (len--) {
		if (kstrchr(str2, str1[i]))
			return i;
		i++;
	}

	return -1;
}
Exemple #7
0
char* kstrpbrk(char* str1, char* str2)
{
	int i = 0;
	int len = 0;

	if (!str1 || !str2) return 0;
	len = kstrlen(str1);
	while(len--) {
		if (kstrchr(str2, str1[i]))
			return &str1[i];
		i++;
	}

	return 0;
}
Exemple #8
0
static int toggle_dbgmsg(char * cfg)
{
    struct _kerror_dyndebug_msg * msg_opt = &__start_set_debug_msg_sect;
    struct _kerror_dyndebug_msg * stop = &__stop_set_debug_msg_sect;
    char strbuf[DD_MAX_LINE];
    char * file = strbuf;
    char * line;

    if (msg_opt == stop)
        return -EINVAL;

    if (cfg[0] == '*') { /* Match all */
        file = NULL;
        line = NULL;
    } else { /* Match specfic file */
        strlcpy(strbuf, cfg, sizeof(strbuf));
        file = strbuf;
        line = kstrchr(strbuf, ':');

        if (line) { /* Match line number */
            line[0] = '\0';
            line++;
        }
    }

    while (msg_opt < stop) {
        if (file) {
            if (strcmp(file, msg_opt->file) != 0)
                goto next;

            if (line && *line != '\0') {
                char msgline[12];

                uitoa32(msgline, msg_opt->line);
                if (strcmp(line, msgline) != 0)
                    goto next;
            }
        }

        /* Toggle */
        msg_opt->flags ^= 1;

next:
        msg_opt++;
    }

    return 0;
}