mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
Refactor pg_get_line() to expose an alternative StringInfo-based API.
Letting the caller provide a StringInfo to read into is helpful when the caller needs to merge lines or otherwise modify the data after it's been read. Notably, now the code added by commit8f8154a50
can use pg_get_line_append() instead of having its own copy of that logic. A follow-on commit will also make use of this. Also, since StringInfo buffers are a minimum of 1KB long, blindly using pg_get_line() in a loop can eat a lot more memory than one would expect. I discovered for instance that commite0f05cd5b
caused initdb to consume circa 10MB to read postgres.bki, even though that's under 1MB worth of data. A less memory-hungry alternative is to re-use the same StringInfo for all lines and pg_strdup the results. Discussion: https://postgr.es/m/1315832.1599345736@sss.pgh.pa.us
This commit is contained in:
@ -10,6 +10,8 @@
|
||||
#ifndef COMMON_STRING_H
|
||||
#define COMMON_STRING_H
|
||||
|
||||
struct StringInfoData; /* avoid including stringinfo.h here */
|
||||
|
||||
/* functions in src/common/string.c */
|
||||
extern bool pg_str_endswith(const char *str, const char *end);
|
||||
extern int strtoint(const char *pg_restrict str, char **pg_restrict endptr,
|
||||
@ -19,6 +21,7 @@ extern int pg_strip_crlf(char *str);
|
||||
|
||||
/* functions in src/common/pg_get_line.c */
|
||||
extern char *pg_get_line(FILE *stream);
|
||||
extern bool pg_get_line_append(FILE *stream, struct StringInfoData *buf);
|
||||
|
||||
/* functions in src/common/sprompt.c */
|
||||
extern char *simple_prompt(const char *prompt, bool echo);
|
||||
|
Reference in New Issue
Block a user