Hi, Attached patch fixes the minor issues in pg_rewind. The fixes are
* Remove invalid option character "N" from the third argument (valid option string) of getopt_long(). * Use pg_free() or pfree() to free the memory allocated by pg_malloc() or palloc() instead of always using free(). * Assume problem is no disk space if write() fails but doesn't set errno. * Fix several typos. Regards, -- Fujii Masao
diff --git a/src/bin/pg_rewind/copy_fetch.c b/src/bin/pg_rewind/copy_fetch.c index 1ca00d1..991e348 100644 --- a/src/bin/pg_rewind/copy_fetch.c +++ b/src/bin/pg_rewind/copy_fetch.c @@ -43,7 +43,7 @@ traverse_datadir(const char *datadir, process_file_callback_t callback) /* * recursive part of traverse_datadir * - * parent_path is the current subdirectory's path relative to datadir, + * parentpath is the current subdirectory's path relative to datadir, * or NULL at the top level. */ static void @@ -262,5 +262,5 @@ execute_pagemap(datapagemap_t *pagemap, const char *path) copy_file_range(path, offset, offset + BLCKSZ, false); /* Ok, this block has now been copied from new data dir to old */ } - free(iter); + pg_free(iter); } diff --git a/src/bin/pg_rewind/datapagemap.c b/src/bin/pg_rewind/datapagemap.c index 3477366..ff10bc9 100644 --- a/src/bin/pg_rewind/datapagemap.c +++ b/src/bin/pg_rewind/datapagemap.c @@ -67,7 +67,7 @@ datapagemap_add(datapagemap_t *map, BlockNumber blkno) * Start iterating through all entries in the page map. * * After datapagemap_iterate, call datapagemap_next to return the entries, - * until it returns NULL. After you're done, use free() to destroy the + * until it returns false. After you're done, use pg_free() to destroy the * iterator. */ datapagemap_iterator_t * @@ -122,5 +122,5 @@ datapagemap_print(datapagemap_t *map) while (datapagemap_next(iter, &blocknum)) printf(" blk %u\n", blocknum); - free(iter); + pg_free(iter); } diff --git a/src/bin/pg_rewind/file_ops.c b/src/bin/pg_rewind/file_ops.c index 589a01a..d6a743f 100644 --- a/src/bin/pg_rewind/file_ops.c +++ b/src/bin/pg_rewind/file_ops.c @@ -105,10 +105,16 @@ write_target_range(char *buf, off_t begin, size_t size) { int writelen; + errno = 0; writelen = write(dstfd, p, writeleft); if (writelen < 0) + { + /* if write didn't set errno, assume problem is no disk space */ + if (errno == 0) + errno = ENOSPC; pg_fatal("could not write file \"%s\": %s\n", dstpath, strerror(errno)); + } p += writelen; writeleft -= writelen; diff --git a/src/bin/pg_rewind/filemap.c b/src/bin/pg_rewind/filemap.c index cb2bf4d..3821e9c 100644 --- a/src/bin/pg_rewind/filemap.c +++ b/src/bin/pg_rewind/filemap.c @@ -114,7 +114,7 @@ process_source_file(const char *path, file_type_t type, size_t newsize, case FILE_TYPE_DIRECTORY: if (exists && !S_ISDIR(statbuf.st_mode)) { - /* it's a directory in target, but not in source. Strange.. */ + /* it's a directory in source, but not in target. Strange.. */ pg_fatal("\"%s\" is not a directory\n", localpath); } @@ -135,7 +135,7 @@ process_source_file(const char *path, file_type_t type, size_t newsize, ) { /* - * It's a symbolic link in target, but not in source. + * It's a symbolic link in source, but not in target. * Strange.. */ pg_fatal("\"%s\" is not a symbolic link\n", localpath); @@ -354,7 +354,7 @@ process_block_change(ForkNumber forknum, RelFileNode rnode, BlockNumber blkno) entry = *e; else entry = NULL; - free(path); + pfree(path); if (entry) { @@ -530,7 +530,7 @@ print_filemap(void) * Does it look like a relation data file? * * For our purposes, only files belonging to the main fork are considered - * relation files. Other forks are alwayes copied in toto, because we cannot + * relation files. Other forks are always copied in toto, because we cannot * reliably track changes to them, because WAL only contains block references * for the main fork. */ diff --git a/src/bin/pg_rewind/libpq_fetch.c b/src/bin/pg_rewind/libpq_fetch.c index 14a8610..6ffd24e 100644 --- a/src/bin/pg_rewind/libpq_fetch.c +++ b/src/bin/pg_rewind/libpq_fetch.c @@ -69,7 +69,7 @@ libpqConnect(const char *connstr) pg_free(str); /* - * Also check that full_page-writes are enabled. We can get torn pages if + * Also check that full_page_writes is enabled. We can get torn pages if * a page is modified while we read it with pg_read_binary_file(), and we * rely on full page images to fix them. */ @@ -465,5 +465,5 @@ execute_pagemap(datapagemap_t *pagemap, const char *path) fetch_file_range(path, offset, offset + BLCKSZ); } - free(iter); + pg_free(iter); } diff --git a/src/bin/pg_rewind/logging.h b/src/bin/pg_rewind/logging.h index 0272a22..efbc9b7 100644 --- a/src/bin/pg_rewind/logging.h +++ b/src/bin/pg_rewind/logging.h @@ -32,4 +32,4 @@ extern void pg_fatal(const char *fmt,...) pg_attribute_printf(1, 2) pg_attribute extern void progress_report(bool force); -#endif +#endif /* PG_REWIND_LOGGING_H */ diff --git a/src/bin/pg_rewind/pg_rewind.c b/src/bin/pg_rewind/pg_rewind.c index 8088be4..7e54ac5 100644 --- a/src/bin/pg_rewind/pg_rewind.c +++ b/src/bin/pg_rewind/pg_rewind.c @@ -121,7 +121,7 @@ main(int argc, char **argv) } } - while ((c = getopt_long(argc, argv, "D:NnP", long_options, &option_index)) != -1) + while ((c = getopt_long(argc, argv, "D:nP", long_options, &option_index)) != -1) { switch (c) { @@ -370,7 +370,7 @@ sanityChecks(void) if (ControlFile_target.data_checksum_version != PG_DATA_CHECKSUM_VERSION && !ControlFile_target.wal_log_hints) { - pg_fatal("target server need to use either data checksums or \"wal_log_hints = on\"\n"); + pg_fatal("target server needs to use either data checksums or \"wal_log_hints = on\"\n"); } /* @@ -450,7 +450,7 @@ findCommonAncestorTimeline(XLogRecPtr *recptr, TimeLineID *tli) *recptr = entry->end; *tli = entry->tli; - free(sourceHistory); + pg_free(sourceHistory); return; } }
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers