GIT_INLINE(int) rebase_readint( size_t *out, git_buf *asc_out, git_buf *state_path, const char *filename) { int32_t num; const char *eol; int error = 0; if ((error = rebase_readfile(asc_out, state_path, filename)) < 0) return error; if (git__strntol32(&num, asc_out->ptr, asc_out->size, &eol, 10) < 0 || num < 0 || *eol) { git_error_set(GIT_ERROR_REBASE, "the file '%s' contains an invalid numeric value", filename); return -1; } *out = (size_t) num; return 0; }
static int parse_header_percent(uint16_t *out, git_patch_parse_ctx *ctx) { int32_t val; const char *end; if (ctx->line_len < 1 || !git__isdigit(ctx->line[0]) || git__strntol32(&val, ctx->line, ctx->line_len, &end, 10) < 0) return -1; parse_advance_chars(ctx, (end - ctx->line)); if (parse_advance_expected_s(ctx, "%") < 0) return -1; if (val > 100) return -1; *out = val; return 0; }
static int parse_header_mode(uint16_t *mode, git_patch_parse_ctx *ctx) { const char *end; int32_t m; int ret; if (ctx->line_len < 1 || !git__isdigit(ctx->line[0])) return parse_err("invalid file mode at line %d", ctx->line_num); if ((ret = git__strntol32(&m, ctx->line, ctx->line_len, &end, 8)) < 0) return ret; if (m > UINT16_MAX) return -1; *mode = (uint16_t)m; parse_advance_chars(ctx, (end - ctx->line)); return ret; }