int main(){ Simple_window win(Point(100, 100), 600, 400, "Ocatagon"); // Octagonクラスのテスト Octagon oct(Point(300, 200), 150); // パラメータを表示 cout << "center: " << oct.center().x << ", " << oct.center().y << endl; cout << "radius: " << oct.radius() << endl; for(int i = 0; i < oct.number_of_points(); ++i) cout << "point" << i << ": " << oct.point(i).x << ", " << oct.point(i).y << endl; win.attach(oct); win.wait_for_button(); oct.set_color(Color::dark_blue); // 線の色を変更 oct.set_style(Line_style(Line_style::dot, 5)); // 線の種類を変更 win.wait_for_button(); oct.set_fill_color(Color::dark_cyan); // 塗りつぶし色を変更 win.wait_for_button(); //oct.move(50, 0); // 使用できないメンバ関数 //oct.add(Point(20, 20)); }
int main(int argc, char *args[]) { g=argc; dec(argc); hex(argc); flt(argc); oct(argc); return 0; }
void main() { clrscr(); int i,n; long int bin(int),oct(int); void hex(int); cout<<"Enter limit : "; cin>>n; clrscr(); cout<<"Decimal\tBinary\tOctal\tHexa Decimal\n"; for(i=1; i<=n; i++) { cout<<i<<"\t"<<bin(i)<<"\t"<<oct(i)<<"\t"; hex(i); if(i%24==0) getch(); } getch(); }
int main() { const my_facet f(1); { std::ios ios(0); long v = 0; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0"); } { std::ios ios(0); long v = 1; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "1"); } { std::ios ios(0); long v = -1; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "-1"); } { std::ios ios(0); long v = -1000; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "-1000"); } { std::ios ios(0); long v = 1000; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "1000"); } { std::ios ios(0); showpos(ios); long v = 1000; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "+1000"); } { std::ios ios(0); oct(ios); long v = 1000; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "1750"); } { std::ios ios(0); oct(ios); showbase(ios); long v = 1000; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "01750"); } { std::ios ios(0); hex(ios); long v = 1000; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "3e8"); } { std::ios ios(0); hex(ios); showbase(ios); long v = 1000; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0x3e8"); } { std::ios ios(0); hex(ios); showbase(ios); uppercase(ios); long v = 1000; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0X3E8"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); hex(ios); showbase(ios); uppercase(ios); long v = 1000; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0X3E_8"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); hex(ios); showbase(ios); long v = 2147483647; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0x7f_fff_ff_f"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); oct(ios); long v = 0123467; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "123_46_7"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); oct(ios); showbase(ios); long v = 0123467; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0_123_46_7"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); oct(ios); showbase(ios); right(ios); ios.width(15); long v = 0123467; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "*****0_123_46_7"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); oct(ios); showbase(ios); left(ios); ios.width(15); long v = 0123467; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0_123_46_7*****"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); oct(ios); showbase(ios); internal(ios); ios.width(15); long v = 0123467; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "*****0_123_46_7"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); hex(ios); showbase(ios); right(ios); ios.width(15); long v = 2147483647; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "**0x7f_fff_ff_f"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); hex(ios); showbase(ios); left(ios); ios.width(15); long v = 2147483647; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0x7f_fff_ff_f**"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); hex(ios); showbase(ios); internal(ios); ios.width(15); long v = 2147483647; char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0x**7f_fff_ff_f"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); showpos(ios); long v = 1000; right(ios); ios.width(10); char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "***+1_00_0"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); showpos(ios); long v = 1000; left(ios); ios.width(10); char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "+1_00_0***"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); showpos(ios); long v = 1000; internal(ios); ios.width(10); char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "+***1_00_0"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); long v = -1000; right(ios); showpos(ios); ios.width(10); char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "***-1_00_0"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); long v = -1000; left(ios); ios.width(10); char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "-1_00_0***"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); long v = -1000; internal(ios); ios.width(10); char str[50]; std::ios_base::iostate err = ios.goodbit; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "-***1_00_0"); assert(ios.width() == 0); } }
static enum rules_token lex(struct scanner *s, union lvalue *val) { skip_more_whitespace_and_comments: /* Skip spaces. */ while (is_space(peek(s))) if (next(s) == '\n') return TOK_END_OF_LINE; /* Skip comments. */ if (chr(s, '#')) { skip_to_eol(s); goto skip_more_whitespace_and_comments; } /* See if we're done. */ if (eof(s)) return TOK_END_OF_FILE; /* New token. */ s->token_line = s->line; s->token_column = s->column; s->buf_pos = 0; /* LHS Keysym. */ if (chr(s, '<')) { while (peek(s) != '>' && !eol(s)) buf_append(s, next(s)); if (!chr(s, '>')) { scanner_err(s, "unterminated keysym literal"); return TOK_ERROR; } if (!buf_append(s, '\0')) { scanner_err(s, "keysym literal is too long"); return TOK_ERROR; } val->string.str = s->buf; val->string.len = s->buf_pos; return TOK_LHS_KEYSYM; } /* Colon. */ if (chr(s, ':')) return TOK_COLON; if (chr(s, '!')) return TOK_BANG; if (chr(s, '~')) return TOK_TILDE; /* String literal. */ if (chr(s, '\"')) { while (!eof(s) && !eol(s) && peek(s) != '\"') { if (chr(s, '\\')) { uint8_t o; if (chr(s, '\\')) { buf_append(s, '\\'); } else if (chr(s, '"')) { buf_append(s, '"'); } else if (chr(s, 'x') || chr(s, 'X')) { if (hex(s, &o)) buf_append(s, (char) o); else scanner_warn(s, "illegal hexadecimal escape sequence in string literal"); } else if (oct(s, &o)) { buf_append(s, (char) o); } else { scanner_warn(s, "unknown escape sequence (%c) in string literal", peek(s)); /* Ignore. */ } } else { buf_append(s, next(s)); } } if (!chr(s, '\"')) { scanner_err(s, "unterminated string literal"); return TOK_ERROR; } if (!buf_append(s, '\0')) { scanner_err(s, "string literal is too long"); return TOK_ERROR; } if (!is_valid_utf8(s->buf, s->buf_pos - 1)) { scanner_err(s, "string literal is not a valid UTF-8 string"); return TOK_ERROR; } val->string.str = s->buf; val->string.len = s->buf_pos; return TOK_STRING; } /* Identifier or include. */ if (is_alpha(peek(s)) || peek(s) == '_') { s->buf_pos = 0; while (is_alnum(peek(s)) || peek(s) == '_') buf_append(s, next(s)); if (!buf_append(s, '\0')) { scanner_err(s, "identifier is too long"); return TOK_ERROR; } if (streq(s->buf, "include")) return TOK_INCLUDE; val->string.str = s->buf; val->string.len = s->buf_pos; return TOK_IDENT; } /* Discard rest of line. */ skip_to_eol(s); scanner_err(s, "unrecognized token"); return TOK_ERROR; }
int _xkbcommon_lex(YYSTYPE *yylval, struct scanner *s) { int tok; skip_more_whitespace_and_comments: /* Skip spaces. */ while (is_space(peek(s))) next(s); /* Skip comments. */ if (lit(s, "//") || chr(s, '#')) { while (!eof(s) && !eol(s)) next(s); goto skip_more_whitespace_and_comments; } /* See if we're done. */ if (eof(s)) return END_OF_FILE; /* New token. */ s->token_line = s->line; s->token_column = s->column; s->buf_pos = 0; /* String literal. */ if (chr(s, '\"')) { while (!eof(s) && !eol(s) && peek(s) != '\"') { if (chr(s, '\\')) { uint8_t o; if (chr(s, '\\')) buf_append(s, '\\'); else if (chr(s, 'n')) buf_append(s, '\n'); else if (chr(s, 't')) buf_append(s, '\t'); else if (chr(s, 'r')) buf_append(s, '\r'); else if (chr(s, 'b')) buf_append(s, '\b'); else if (chr(s, 'f')) buf_append(s, '\f'); else if (chr(s, 'v')) buf_append(s, '\v'); else if (chr(s, 'e')) buf_append(s, '\033'); else if (oct(s, &o)) buf_append(s, (char) o); else { scanner_warn(s, "unknown escape sequence in string literal"); /* Ignore. */ } } else { buf_append(s, next(s)); } } if (!buf_append(s, '\0') || !chr(s, '\"')) return scanner_error(s, "unterminated string literal"); yylval->str = strdup(s->buf); if (!yylval->str) return scanner_error(s, "scanner out of memory"); return STRING; } /* Key name literal. */ if (chr(s, '<')) { while (is_graph(peek(s)) && peek(s) != '>') buf_append(s, next(s)); if (!buf_append(s, '\0') || !chr(s, '>')) return scanner_error(s, "unterminated key name literal"); /* Empty key name literals are allowed. */ yylval->sval = xkb_atom_intern(s->ctx, s->buf, s->buf_pos - 1); return KEYNAME; } /* Operators and punctuation. */ if (chr(s, ';')) return SEMI; if (chr(s, '{')) return OBRACE; if (chr(s, '}')) return CBRACE; if (chr(s, '=')) return EQUALS; if (chr(s, '[')) return OBRACKET; if (chr(s, ']')) return CBRACKET; if (chr(s, '(')) return OPAREN; if (chr(s, ')')) return CPAREN; if (chr(s, '.')) return DOT; if (chr(s, ',')) return COMMA; if (chr(s, '+')) return PLUS; if (chr(s, '-')) return MINUS; if (chr(s, '*')) return TIMES; if (chr(s, '/')) return DIVIDE; if (chr(s, '!')) return EXCLAM; if (chr(s, '~')) return INVERT; /* Identifier. */ if (is_alpha(peek(s)) || peek(s) == '_') { s->buf_pos = 0; while (is_alnum(peek(s)) || peek(s) == '_') buf_append(s, next(s)); if (!buf_append(s, '\0')) return scanner_error(s, "identifier too long"); /* Keyword. */ tok = keyword_to_token(s->buf); if (tok != -1) return tok; yylval->str = strdup(s->buf); if (!yylval->str) return scanner_error(s, "scanner out of memory"); return IDENT; } /* Number literal (hexadecimal / decimal / float). */ if (number(s, &yylval->num, &tok)) { if (tok == ERROR_TOK) return scanner_error(s, "malformed number literal"); return tok; } return scanner_error(s, "unrecognized token"); }
int main() { const my_facet f(1); { std::ios ios(0); unsigned long long v = 0; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0"); } { std::ios ios(0); unsigned long long v = 1; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "1"); } { std::ios ios(0); unsigned long long v = -1; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == (sizeof(unsigned long long) == 4 ? "4294967295" : "18446744073709551615")); } { std::ios ios(0); unsigned long long v = -1000; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "18446744073709550616"); } { std::ios ios(0); unsigned long long v = 1000; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "1000"); } { std::ios ios(0); showpos(ios); unsigned long long v = 1000; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "1000"); } { std::ios ios(0); oct(ios); unsigned long long v = 1000; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "1750"); } { std::ios ios(0); oct(ios); showbase(ios); unsigned long long v = 1000; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "01750"); } { std::ios ios(0); hex(ios); unsigned long long v = 1000; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "3e8"); } { std::ios ios(0); hex(ios); showbase(ios); unsigned long long v = 1000; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0x3e8"); } { std::ios ios(0); hex(ios); showbase(ios); uppercase(ios); unsigned long long v = 1000; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0X3E8"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); hex(ios); showbase(ios); uppercase(ios); unsigned long long v = 1000; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0X3E_8"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); hex(ios); showbase(ios); unsigned long long v = 2147483647; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0x7f_fff_ff_f"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); oct(ios); unsigned long long v = 0123467; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "123_46_7"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); oct(ios); showbase(ios); unsigned long long v = 0123467; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0_123_46_7"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); oct(ios); showbase(ios); right(ios); ios.width(15); unsigned long long v = 0123467; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "*****0_123_46_7"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); oct(ios); showbase(ios); left(ios); ios.width(15); unsigned long long v = 0123467; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0_123_46_7*****"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); oct(ios); showbase(ios); internal(ios); ios.width(15); unsigned long long v = 0123467; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "*****0_123_46_7"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); hex(ios); showbase(ios); right(ios); ios.width(15); unsigned long long v = 2147483647; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "**0x7f_fff_ff_f"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); hex(ios); showbase(ios); left(ios); ios.width(15); unsigned long long v = 2147483647; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0x7f_fff_ff_f**"); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); hex(ios); showbase(ios); internal(ios); ios.width(15); unsigned long long v = 2147483647; char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "0x**7f_fff_ff_f"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); showpos(ios); unsigned long long v = 1000; right(ios); ios.width(10); char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "****1_00_0"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); showpos(ios); unsigned long long v = 1000; left(ios); ios.width(10); char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "1_00_0****"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); showpos(ios); unsigned long long v = 1000; internal(ios); ios.width(10); char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "****1_00_0"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); unsigned long long v = -1000; right(ios); showpos(ios); ios.width(10); char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "18_446_744_073_709_550_61_6"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); unsigned long long v = -1000; left(ios); ios.width(10); char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "18_446_744_073_709_550_61_6"); assert(ios.width() == 0); } { std::ios ios(0); ios.imbue(std::locale(std::locale::classic(), new my_numpunct)); unsigned long long v = -1000; internal(ios); ios.width(10); char str[50]; output_iterator<char*> iter = f.put(output_iterator<char*>(str), ios, '*', v); std::string ex(str, iter.base()); assert(ex == "18_446_744_073_709_550_61_6"); assert(ios.width() == 0); } }
int main() { const my_facet f(1); std::ios ios(0); long v = -1; { const char str[] = "123"; assert((ios.flags() & ios.basefield) == ios.dec); assert(ios.getloc().name() == "C"); std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+3); assert(err == ios.goodbit); assert(v == 123); } { const char str[] = "-123"; assert((ios.flags() & ios.basefield) == ios.dec); assert(ios.getloc().name() == "C"); std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+4); assert(err == ios.goodbit); assert(v == -123); } { const char str[] = "123"; oct(ios); std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+3); assert(err == ios.goodbit); assert(v == 83); } { const char str[] = "123"; hex(ios); std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+3); assert(err == ios.goodbit); assert(v == 291); } { const char str[] = "0x123"; hex(ios); std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 291); } { const char str[] = "123"; ios.setf(0, ios.basefield); std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 123); } { const char str[] = "0x123"; ios.setf(0, ios.basefield); std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 291); } { const char str[] = "0123"; ios.setf(0, ios.basefield); std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 83); } { const char str[] = "2-"; ios.setf(0, ios.basefield); std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+1); assert(err == ios.goodbit); assert(v == 2); } dec(ios); ios.imbue(std::locale(std::locale(), new my_numpunct)); { v = -1; const char str[] = "123"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 123); } { v = -1; const char str[] = "+1"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 1); } { v = -1; const char str[] = "+1_"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 1); } { v = -1; const char str[] = "+_1"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 1); } { v = -1; const char str[] = "_+1"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 1); } { v = -1; const char str[] = "+1__"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 1); } { v = -1; const char str[] = "+_1_"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 1); } { v = -1; const char str[] = "_+1_"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 1); } { v = -1; const char str[] = "+__1"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 1); } { v = -1; const char str[] = "_+_1"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 1); } { v = -1; const char str[] = "__+1"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 1); } { v = -1; const char str[] = "+1_2"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 12); } { v = -1; const char str[] = "+12_"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 12); } { v = -1; const char str[] = "+_12"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 12); } { v = -1; const char str[] = "+1__2"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 12); } { v = -1; const char str[] = "+12_3"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 123); } { v = -1; const char str[] = "+1_23"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 123); } { v = -1; const char str[] = "+1_23_4"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 1234); } { v = -1; const char str[] = "+123_4"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 1234); } { v = -1; const char str[] = "+12_34"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 1234); } { v = -1; const char str[] = "+12_34_5"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 12345); } { v = -1; const char str[] = "+123_45_6"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 123456); } { v = -1; const char str[] = "+1_23_45_6"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 123456); } { v = -1; const char str[] = "+1_234_56_7"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 1234567); } { v = -1; const char str[] = "+1_234_567_89_0"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 1234567890); } { v = -1; const char str[] = "-1_234_567_89_0"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == -1234567890); } { v = -1; const char str[] = "1_234_567_89_0"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.goodbit); assert(v == 1234567890); } { v = -1; const char str[] = "1234_567_89_0"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == 1234567890); } { v = -1; const char str[] = "1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_" "1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_" "1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_" "1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_" "1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_" "1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_" "1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_" "1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_" "1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_" "1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_" "1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_1_2_3_4_5_6_7_8_9_0_"; std::ios_base::iostate err = ios.goodbit; input_iterator<const char*> iter = f.get(input_iterator<const char*>(str), input_iterator<const char*>(str+sizeof(str)), ios, err, v); assert(iter.base() == str+sizeof(str)-1); assert(err == ios.failbit); assert(v == std::numeric_limits<long>::max()); } }
void TarWriter::writeFile(String path, FileStatus *status) { Ref<StringList> headerFields = StringList::create(); off_t contentSize = status->size(); if (status->type() != File::Regular) contentSize = 0; if (status->type() == File::Directory) { if (path->count() > 0) { if (path->at(path->count() - 1) != '/') path = path + "/"; } } String pathField(99, '\0'); if (status == longPathStatus_ || status == longLinkStatus_) *pathField = *String("././@LongLink"); else *pathField = *path; headerFields->append(pathField); headerFields->append(zero_); headerFields->append(oct(status->mode(), 7)); headerFields->append(zero_); headerFields->append(oct(status->ownerId(), 7)); headerFields->append(zero_); headerFields->append(oct(status->groupId(), 7)); headerFields->append(zero_); if (status == longPathStatus_ || status == longLinkStatus_) headerFields->append(oct(path->count() + 1, 11)); else headerFields->append(oct(contentSize, 11)); headerFields->append(zero_); headerFields->append(oct(status->st_mtime, 11)); headerFields->append(zero_); String checksumField(6, '0'); headerFields->append(checksumField); headerFields->append(String("\0 ", 2)); String typeField, linkTarget; if (status == longLinkStatus_ ) typeField = "K"; else if (status == longPathStatus_) typeField = "L"; else { if (status->type() == File::Regular) ; else if (status->type() == File::Directory) typeField = "5"; else if (status->type() == File::Symlink) typeField = "2"; else if (status->type() == File::CharDevice) typeField = "3"; else if (status->type() == File::BlockDevice) typeField = "4"; else if (status->type() == File::Fifo) typeField = "6"; if (status->numberOfHardLinks() > 1) { FileId fid(status); if (hardLinks_->lookup(fid, &linkTarget)) typeField = "1"; else hardLinks_->insert(fid, path); } else if (status->type() == File::Symlink) { linkTarget = File::readlink(path); } if (typeField == "") typeField = "0"; if (typeField != "0") contentSize = 0; } headerFields->append(typeField); String linkField(99, '\0'); *linkField = *linkTarget; headerFields->append(linkField); headerFields->append(zero_); String gnuMagicField("ustar "); headerFields->append(gnuMagicField); headerFields->append(zero_); String userField(31, '\0'); *userField = *User::lookup(status->ownerId())->name(); headerFields->append(userField); headerFields->append(zero_); String groupField(31, '\0'); *groupField = *Group::lookup(status->groupId())->name(); headerFields->append(groupField); headerFields->append(zero_); if (status != longPathStatus_ && status != longLinkStatus_) { if (path->count() > pathField->count()) writeFile(path, longPathStatus_); if (linkTarget->count() > linkField->count()) writeFile(linkTarget, longLinkStatus_); } String header = headerFields->join(); FLUX_ASSERT(header->count() == 329); unsigned checksum = tarHeaderSum(header); *checksumField = *oct(checksum, 6); header = headerFields->join(); sink_->write(header); writePadding(header->count()); if (status == longPathStatus_ || status == longLinkStatus_) { sink_->write(path); sink_->write(zero_); writePadding(path->count() + 1); } else if (contentSize > 0) { File::open(path)->transfer(contentSize, sink_); writePadding(contentSize); } }
template<> str *oct(__ss_bool b) { return oct(b.value); }
//-------------------------------------------------------------------------- void idaapi load_file(linput_t *li, ushort _neflag, const char * /*fileformatname*/) { char line[MAXSTR]; char *words[MAXSTR]; neflag = _neflag; iscode = (neflag & NEF_CODE) != 0; sel = BADSEL; sea = BADADDR; ea_t ea = 0; ea_t top= 0; bool use32 = false; bool octpref = false; bool octnum = false; size_t fill = 0; // Since we made all the checks in accept_file, // here we don't repeat them ssize_t p0len = -1; // length of the first word's hex part char w0sep[10]; // separator after the first word w0sep[0] = '\0'; int nontrivial_line_count = 0; while ( qlgets(line, sizeof(line), li) ) { strrpl(line, '-', ' '); if ( line[0] == ';' || line[0] == '#' ) continue; int n = make_words(line, words, qnumber(words)); if ( n == 0 ) continue; nontrivial_line_count++; ssize_t bi; // od -x format may contain '*' lines which mean repetition if ( strcmp(words[0], "*") == 0 && n == 1 ) { fill = size_t(top - ea); octpref = true; // od -x have octal prefixes continue; } // the first word must be a number (more than one digit) char *ptr = words[0]; uint32 w0 = octpref ? oct(ptr) : hex(ptr); p0len = ptr - words[0]; // take the separator from the first line if ( nontrivial_line_count == 1 ) qstrncpy(w0sep, ptr, sizeof(w0sep)); // process '*' and fill the gap if ( fill > 0 ) { while ( top < w0 ) { ea = top; top = ea + fill; copy(ea, top); } } int idx = 0; if ( w0sep[0] != '\0' || p0len >= 4 ) { if ( nontrivial_line_count > 1 && !octpref && top != w0 ) { // strange, the sequence is not contiguous // check if the prefixes are octal (od -x) ptr = words[0]; if ( oct(ptr) == top ) { octpref = true; ptr = words[0]; w0 = oct(ptr); } } ea = w0; idx = 1; } else { ea = top; } for ( bi=0; idx < n; idx++ ) //lint !e443 { ptr = words[idx]; if ( nontrivial_line_count == 1 && !octnum && strlen(ptr) == 6 ) { oct(ptr); if ( ptr-words[idx] == 6 ) octnum = true; ptr = words[idx]; // msg("ptr=%s octnum=%d\n", ptr, octnum); } uint32 b = octnum ? oct(ptr) : hex(ptr); ssize_t nc = ptr - words[idx]; if ( nc < 2 ) { // we tolerate one-letter separators between numbers if ( words[idx][1] == '\0' && strchr("\xA6|-:", words[idx][0]) != NULL ) continue; break; } nc /= octnum ? 3 : 2; // number of bytes *(uint32 *)&bytes[bi] = b; bi += nc; } top = ea + bi; copy(ea, top); } if ( eea >= 0x10000 || p0len > 4 ) use32 = true; if ( neflag & NEF_SEGS ) { if ( use32 ) { set_segm_addressing(getseg(sea), 1); if ( ph.id == PLFM_386 ) inf.lflags |= LFLG_PC_FLAT; } set_default_dataseg(sel); } if ( (neflag & NEF_RELOAD) == 0 ) create_filename_cmt(); }
bool TarReader::readHeader(Ref<ArchiveEntry> *nextEntry) { if (!data_) data_ = ByteArray::create(512); *nextEntry = ArchiveEntry::create(); ByteArray *data = data_; ArchiveEntry *entry = *nextEntry; if (source_->readAll(data) < data->count()) return false; i_ += data->count(); bool eoi = true; for (int i = 0; i < data->count(); ++i) { if (data->byteAt(i) != 0) { eoi = false; break; } } if (eoi) return false; bool ustarMagic = false; bool gnuMagic = false; bool readAgain = true; while (readAgain) { readAgain = false; String magic; data->scanString(&magic, "", 257, 263); ustarMagic = (magic == "ustar"); gnuMagic = (magic == "ustar "); unsigned checksum, probesum; data->scanNumber(&checksum, 8, 148, 156); entry->type_ = data->at(156); if (entry->path_ == "") data->scanString(&entry->path_, "", 0, 100); if (entry->linkPath_ == "") data->scanString(&entry->linkPath_, "", 157, 257); probesum = tarHeaderSum(data); if (checksum != probesum) throw BrokenArchive(i_ - data->count(), Format("Checksum mismatch (%% != %%), path = \"%%\"") << oct(checksum, 6) << oct(probesum, 6) << entry->path()); if (gnuMagic) { while ((entry->type_ == 'K' || entry->type_ == 'L') /*&& entry->path_ == "././@LongLink"*/) { data->scanNumber(&entry->size_, 8, 124, 136); String longPath = source_->readAll(entry->size_); if (longPath->count() < entry->size_) throw BrokenArchive(i_, "Expected GNU @LongLink data"); i_ += entry->size_; if (entry->size() % 512 != 0) { i_ += source_->skip(512 - entry->size() % 512); } if (longPath->byteAt(longPath->count() - 1) == 0) longPath->truncate(longPath->count() - 1); if (entry->type_ == 'K') entry->linkPath_ = longPath; else if (entry->type_ == 'L') entry->path_ = longPath; if (source_->readAll(data) < data->count()) throw BrokenArchive(i_, "Expected GNU @LongLink header"); i_ += data->count(); entry->type_ = data->at(156); readAgain = true; } } } if (ustarMagic || gnuMagic) { String prefix; data->scanString(&entry->userName_, "", 265, 297); data->scanString(&entry->groupName_, "", 297, 329); if (!gnuMagic) { data->scanString(&prefix, "", 345, 500); if (prefix != "") entry->path_ = prefix + "/" + entry->path_; } } data->scanNumber(&entry->mode_, 8, 100, 108); data->scanNumber(&entry->userId_, 8, 108, 116); data->scanNumber(&entry->groupId_, 8, 116, 124); data->scanNumber(&entry->size_, 8, 124, 136); data->scanNumber(&entry->lastModified_, 8, 136, 148); if (entry->type() == 0 && entry->path()->count() > 0) { if (entry->path()->at(entry->path()->count() - 1) == '/') entry->type_ = ArchiveEntry::Directory; } entry->offset_ = i_; return true; }
template<> inline str *oct(__ss_int i) { return oct((int)i); }