예제 #1
0
bool getline(u::file &fp, u::string &line) {
    line.clear();
    for (;;) {
        char buf[256];
        if (!fgets(buf, sizeof buf, fp.get())) {
            if (feof(fp.get()))
                return !line.empty();
            abort();
        }
        size_t n = strlen(buf);
        if (n && buf[n - 1] == '\n')
            --n;
        if (n && buf[n - 1] == '\r')
            --n;
        line.append(buf, n);
        if (n < sizeof buf - 1)
            return true;
    }
    return false;
}
예제 #2
0
파일: u_file.cpp 프로젝트: q66/neothyne
u::optional<u::string> getline(u::file &fp) {
    u::string s;
    for (;;) {
        char buf[256];
        if (!fgets(buf, sizeof(buf), fp.get())) {
            if (feof(fp.get())) {
                if (s.empty())
                    return u::none;
                else
                    return u::move(s);
            }
            abort();
        }
        size_t n = strlen(buf);
        if (n && buf[n - 1] == '\n')
            --n;
        s.append(buf, n);
        if (n < sizeof(buf) - 1)
            return u::move(s);
    }
}