Subversion Repositories planix.SVN

Rev

Blame | Last modification | View Log | RSS feed

#include <u.h>
#include <libc.h>
#include "String.h"

#define isspace(c) ((c)==' ' || (c)=='\t' || (c)=='\n')

/* Get the next field from a String.  The field is delimited by white space,
 * single or double quotes.
 */
String *
s_parse(String *from, String *to)
{
        if (*from->ptr == '\0')
                return 0;
        if (to == 0)
                to = s_new();
        if (*from->ptr == '\'') {
                from->ptr++;
                for (;*from->ptr != '\'' && *from->ptr != '\0'; from->ptr++)
                        s_putc(to, *from->ptr);
                if (*from->ptr == '\'') 
                        from->ptr++;
        } else if (*from->ptr == '"') {
                from->ptr++;
                for (;*from->ptr != '"' && *from->ptr != '\0'; from->ptr++)
                        s_putc(to, *from->ptr);
                if (*from->ptr == '"')  
                        from->ptr++;
        } else {
                for (;!isspace(*from->ptr) && *from->ptr != '\0'; from->ptr++)
                        s_putc(to, *from->ptr);
        }
        s_terminate(to);

        /* crunch trailing white */
        while(isspace(*from->ptr))
                from->ptr++;

        return to;
}