config/ConfigFile: use std::unique_ptr
This commit is contained in:
		@@ -32,6 +32,8 @@
 | 
				
			|||||||
#include "fs/io/BufferedReader.hxx"
 | 
					#include "fs/io/BufferedReader.hxx"
 | 
				
			||||||
#include "Log.hxx"
 | 
					#include "Log.hxx"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <memory>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <assert.h>
 | 
					#include <assert.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static constexpr char CONF_COMMENT = '#';
 | 
					static constexpr char CONF_COMMENT = '#';
 | 
				
			||||||
@@ -81,13 +83,11 @@ config_read_name_value(ConfigBlock &block, char *input, unsigned line,
 | 
				
			|||||||
static ConfigBlock *
 | 
					static ConfigBlock *
 | 
				
			||||||
config_read_block(BufferedReader &reader, Error &error)
 | 
					config_read_block(BufferedReader &reader, Error &error)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	auto *ret = new ConfigBlock(reader.GetLineNumber());
 | 
						std::unique_ptr<ConfigBlock> block(new ConfigBlock(reader.GetLineNumber()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	while (true) {
 | 
						while (true) {
 | 
				
			||||||
		char *line = reader.ReadLine();
 | 
							char *line = reader.ReadLine();
 | 
				
			||||||
		if (line == nullptr) {
 | 
							if (line == nullptr) {
 | 
				
			||||||
			delete ret;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if (reader.Check(error))
 | 
								if (reader.Check(error))
 | 
				
			||||||
				error.Set(config_file_domain,
 | 
									error.Set(config_file_domain,
 | 
				
			||||||
					  "Expected '}' before end-of-file");
 | 
										  "Expected '}' before end-of-file");
 | 
				
			||||||
@@ -104,22 +104,21 @@ config_read_block(BufferedReader &reader, Error &error)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			line = StripLeft(line + 1);
 | 
								line = StripLeft(line + 1);
 | 
				
			||||||
			if (*line != 0 && *line != CONF_COMMENT) {
 | 
								if (*line != 0 && *line != CONF_COMMENT) {
 | 
				
			||||||
				delete ret;
 | 
					 | 
				
			||||||
				error.Format(config_file_domain,
 | 
									error.Format(config_file_domain,
 | 
				
			||||||
					     "line %u: Unknown tokens after '}'",
 | 
										     "line %u: Unknown tokens after '}'",
 | 
				
			||||||
					     reader.GetLineNumber());
 | 
										     reader.GetLineNumber());
 | 
				
			||||||
				return nullptr;
 | 
									return nullptr;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			return ret;
 | 
								return block.release();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* parse name and value */
 | 
							/* parse name and value */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (!config_read_name_value(*ret, line, reader.GetLineNumber(),
 | 
							if (!config_read_name_value(*block, line,
 | 
				
			||||||
 | 
										    reader.GetLineNumber(),
 | 
				
			||||||
					    error)) {
 | 
										    error)) {
 | 
				
			||||||
			assert(*line != 0);
 | 
								assert(*line != 0);
 | 
				
			||||||
			delete ret;
 | 
					 | 
				
			||||||
			error.FormatPrefix("line %u: ", reader.GetLineNumber());
 | 
								error.FormatPrefix("line %u: ", reader.GetLineNumber());
 | 
				
			||||||
			return nullptr;
 | 
								return nullptr;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user