You've already forked pgbackrest
							
							
				mirror of
				https://github.com/pgbackrest/pgbackrest.git
				synced 2025-10-30 23:37:45 +02:00 
			
		
		
		
	Apply String constant macros where appropriate.
This may not be all the places where the macros can be useful but it's a good start.
This commit is contained in:
		| @@ -75,7 +75,7 @@ | ||||
|                     </release-item> | ||||
|  | ||||
|                     <release-item> | ||||
|                         <p>Add <code>strCatChr()</code>and constant macros to <code>String</code> object.</p> | ||||
|                         <p>Add <code>strCatChr()</code> and constant macros to <code>String</code> object.</p> | ||||
|                     </release-item> | ||||
|  | ||||
|                     <release-item> | ||||
|   | ||||
| @@ -283,7 +283,7 @@ compress/gzipDecompress.o: compress/gzipDecompress.c common/debug.h common/error | ||||
| config/config.o: config/config.c common/assert.h common/debug.h common/error.auto.h common/error.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/string.h common/type/stringList.h common/type/variant.h common/type/variantList.h config/config.auto.c config/config.auto.h config/config.h config/define.auto.h config/define.h | ||||
| 	$(CC) $(CFLAGS) -c config/config.c -o config/config.o | ||||
|  | ||||
| config/define.o: config/define.c common/assert.h common/debug.h common/error.auto.h common/error.h common/logLevel.h common/stackTrace.h common/type/convert.h config/define.auto.c config/define.auto.h config/define.h | ||||
| config/define.o: config/define.c common/assert.h common/debug.h common/error.auto.h common/error.h common/logLevel.h common/memContext.h common/stackTrace.h common/type/buffer.h common/type/convert.h common/type/string.h config/define.auto.c config/define.auto.h config/define.h | ||||
| 	$(CC) $(CFLAGS) -c config/define.c -o config/define.o | ||||
|  | ||||
| config/load.o: config/load.c command/command.h common/debug.h common/error.auto.h common/error.h common/io/io.h common/lock.h common/log.h common/logLevel.h common/memContext.h common/stackTrace.h common/time.h common/type/buffer.h common/type/convert.h common/type/keyValue.h common/type/string.h common/type/stringList.h common/type/variant.h common/type/variantList.h config/config.auto.h config/config.h config/define.auto.h config/define.h config/load.h config/parse.h | ||||
|   | ||||
| @@ -16,6 +16,12 @@ Archive Push Command | ||||
| #include "storage/helper.h" | ||||
| #include "storage/helper.h" | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| WAL segment constants | ||||
| ***********************************************************************************************************************************/ | ||||
| STRING_EXTERN(WAL_SEGMENT_REGEXP_STR,                               WAL_SEGMENT_REGEXP); | ||||
| STRING_EXTERN(WAL_SEGMENT_PARTIAL_REGEXP_STR,                       WAL_SEGMENT_PARTIAL_REGEXP); | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Check for ok/error status files in the spool in/out directory | ||||
| ***********************************************************************************************************************************/ | ||||
| @@ -32,7 +38,7 @@ archiveAsyncStatus(ArchiveMode archiveMode, const String *walSegment, bool confe | ||||
|  | ||||
|     MEM_CONTEXT_TEMP_BEGIN() | ||||
|     { | ||||
|         String *spoolQueue = strNew(archiveMode == archiveModeGet ? STORAGE_SPOOL_ARCHIVE_IN : STORAGE_SPOOL_ARCHIVE_OUT); | ||||
|         const String *spoolQueue = (archiveMode == archiveModeGet ? STORAGE_SPOOL_ARCHIVE_IN_STR : STORAGE_SPOOL_ARCHIVE_OUT_STR); | ||||
|         String *okFile = strNewFmt("%s.ok", strPtr(walSegment)); | ||||
|         String *errorFile = strNewFmt("%s.error", strPtr(walSegment)); | ||||
|  | ||||
| @@ -148,7 +154,7 @@ walIsSegment(const String *walSegment) | ||||
|     { | ||||
|         MEM_CONTEXT_BEGIN(memContextTop()) | ||||
|         { | ||||
|             regExpSegment = regExpNew(strNew(WAL_SEGMENT_PARTIAL_REGEXP)); | ||||
|             regExpSegment = regExpNew(WAL_SEGMENT_PARTIAL_REGEXP_STR); | ||||
|         } | ||||
|         MEM_CONTEXT_END(); | ||||
|     } | ||||
|   | ||||
| @@ -31,9 +31,11 @@ WAL segment constants | ||||
|  | ||||
| // Match on a WAL segment without checksum appended | ||||
| #define WAL_SEGMENT_REGEXP                                          WAL_SEGMENT_PREFIX_REGEXP "$" | ||||
|     STRING_DECLARE(WAL_SEGMENT_REGEXP_STR); | ||||
|  | ||||
| // Match on a WAL segment with partial allowed | ||||
| #define WAL_SEGMENT_PARTIAL_REGEXP                                  WAL_SEGMENT_PREFIX_REGEXP "(\\.partial){0,1}$" | ||||
|     STRING_DECLARE(WAL_SEGMENT_PARTIAL_REGEXP_STR); | ||||
|  | ||||
| // Defines the size of standard WAL segment name -- hopefully this won't change | ||||
| #define WAL_SEGMENT_NAME_SIZE                                       ((unsigned int)24) | ||||
|   | ||||
| @@ -35,7 +35,7 @@ archiveGetCheck(const String *archiveFile) | ||||
|         PgControl controlInfo = pgControlFromFile(cfgOptionStr(cfgOptPgPath)); | ||||
|  | ||||
|         // Attempt to load the archive info file | ||||
|         InfoArchive *info = infoArchiveNew(storageRepo(), strNew(STORAGE_REPO_ARCHIVE "/" INFO_ARCHIVE_FILE), false); | ||||
|         InfoArchive *info = infoArchiveNew(storageRepo(), STRING_CONST(STORAGE_REPO_ARCHIVE "/" INFO_ARCHIVE_FILE), false); | ||||
|  | ||||
|         // Loop through the pg history in case the WAL we need is not in the most recent archive id | ||||
|         String *archiveId = NULL; | ||||
|   | ||||
| @@ -59,7 +59,7 @@ queueNeed(const String *walSegment, bool found, size_t queueSize, size_t walSegm | ||||
|  | ||||
|         // Get the list of files actually in the queue | ||||
|         StringList *actualQueue = strLstSort( | ||||
|             storageListP(storageSpool(), strNew(STORAGE_SPOOL_ARCHIVE_IN), .errorOnMissing = true), sortOrderAsc); | ||||
|             storageListP(storageSpool(), STORAGE_SPOOL_ARCHIVE_IN_STR, .errorOnMissing = true), sortOrderAsc); | ||||
|  | ||||
|         // Only preserve files that match the ideal queue. '.error'/'.ok' files are deleted so the async process can try again. | ||||
|         RegExp *regExpPreserve = regExpNew(strNewFmt("^(%s)$", strPtr(strLstJoin(idealQueue, "|")))); | ||||
| @@ -184,7 +184,7 @@ cmdArchiveGet(void) | ||||
|  | ||||
|                     // Get a list of WAL segments left in the queue | ||||
|                     StringList *queue = storageListP( | ||||
|                         storageSpool(), strNew(STORAGE_SPOOL_ARCHIVE_IN), .expression = strNew(WAL_SEGMENT_REGEXP)); | ||||
|                         storageSpool(), STORAGE_SPOOL_ARCHIVE_IN_STR, .expression = WAL_SEGMENT_REGEXP_STR); | ||||
|  | ||||
|                     if (strLstSize(queue) > 0) | ||||
|                     { | ||||
| @@ -224,7 +224,7 @@ cmdArchiveGet(void) | ||||
|                             PgControl pgControl = pgControlFromFile(cfgOptionStr(cfgOptPgPath)); | ||||
|  | ||||
|                             // Create the queue | ||||
|                             storagePathCreateNP(storageSpoolWrite(), strNew(STORAGE_SPOOL_ARCHIVE_IN)); | ||||
|                             storagePathCreateNP(storageSpoolWrite(), STORAGE_SPOOL_ARCHIVE_IN_STR); | ||||
|  | ||||
|                             // Clean the current queue using the list of WAL that we ideally want in the queue.  queueNeed() | ||||
|                             // will return the list of WAL needed to fill the queue and this will be passed to the async process. | ||||
|   | ||||
| @@ -72,27 +72,27 @@ helpRenderText(const String *text, size_t indent, bool indentFirst, size_t lengt | ||||
| /*********************************************************************************************************************************** | ||||
| Helper function for helpRender() to output values as strings | ||||
| ***********************************************************************************************************************************/ | ||||
| static String * | ||||
| static const String * | ||||
| helpRenderValue(const Variant *value) | ||||
| { | ||||
|     FUNCTION_DEBUG_BEGIN(logLevelTrace); | ||||
|         FUNCTION_DEBUG_PARAM(VARIANT, value); | ||||
|     FUNCTION_DEBUG_END(); | ||||
|  | ||||
|     String *result = NULL; | ||||
|     const String *result = NULL; | ||||
|  | ||||
|     if (value != NULL) | ||||
|     { | ||||
|         if (varType(value) == varTypeBool) | ||||
|         { | ||||
|             if (varBool(value)) | ||||
|                 result = strNew("y"); | ||||
|                 result = Y_STR; | ||||
|             else | ||||
|                 result = strNew("n"); | ||||
|                 result = N_STR; | ||||
|         } | ||||
|         else if (varType(value) == varTypeKeyValue) | ||||
|         { | ||||
|             result = strNew(""); | ||||
|             String *resultTemp = strNew(""); | ||||
|  | ||||
|             const KeyValue *optionKv = varKv(value); | ||||
|             const VariantList *keyList = kvKeyList(optionKv); | ||||
| @@ -100,32 +100,36 @@ helpRenderValue(const Variant *value) | ||||
|             for (unsigned int keyIdx = 0; keyIdx < varLstSize(keyList); keyIdx++) | ||||
|             { | ||||
|                 if (keyIdx != 0) | ||||
|                     strCat(result, ", "); | ||||
|                     strCat(resultTemp, ", "); | ||||
|  | ||||
|                 strCatFmt( | ||||
|                     result, "%s=%s", strPtr(varStr(varLstGet(keyList, keyIdx))), | ||||
|                     resultTemp, "%s=%s", strPtr(varStr(varLstGet(keyList, keyIdx))), | ||||
|                     strPtr(varStrForce(kvGet(optionKv, varLstGet(keyList, keyIdx))))); | ||||
|             } | ||||
|  | ||||
|             result = resultTemp; | ||||
|         } | ||||
|         else if (varType(value) == varTypeVariantList) | ||||
|         { | ||||
|             result = strNew(""); | ||||
|             String *resultTemp = strNew(""); | ||||
|  | ||||
|             const VariantList *list = varVarLst(value); | ||||
|  | ||||
|             for (unsigned int listIdx = 0; listIdx < varLstSize(list); listIdx++) | ||||
|             { | ||||
|                 if (listIdx != 0) | ||||
|                     strCat(result, ", "); | ||||
|                     strCat(resultTemp, ", "); | ||||
|  | ||||
|                 strCatFmt(result, "%s", strPtr(varStr(varLstGet(list, listIdx)))); | ||||
|                 strCatFmt(resultTemp, "%s", strPtr(varStr(varLstGet(list, listIdx)))); | ||||
|             } | ||||
|  | ||||
|             result = resultTemp; | ||||
|         } | ||||
|         else | ||||
|             result = varStrForce(value); | ||||
|     } | ||||
|  | ||||
|     FUNCTION_DEBUG_RESULT(STRING, result); | ||||
|     FUNCTION_DEBUG_RESULT(CONST_STRING, result); | ||||
| } | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| @@ -260,8 +264,8 @@ helpRender(void) | ||||
|                             strlen(cfgDefOptionHelpSummary(commandDefId, optionDefId)) - 1)); | ||||
|  | ||||
|                         // Ouput current and default values if they exist | ||||
|                         String *defaultValue = helpRenderValue(cfgOptionDefault(optionId)); | ||||
|                         String *value = NULL; | ||||
|                         const String *defaultValue = helpRenderValue(cfgOptionDefault(optionId)); | ||||
|                         const String *value = NULL; | ||||
|  | ||||
|                         if (cfgOptionSource(optionId) != cfgSourceDefault) | ||||
|                             value = helpRenderValue(cfgOption(optionId)); | ||||
| @@ -330,8 +334,8 @@ helpRender(void) | ||||
|                     strPtr(helpRenderText(strNew(cfgDefOptionHelpDescription(commandDefId, optionDefId)), 0, true, CONSOLE_WIDTH))); | ||||
|  | ||||
|                 // Ouput current and default values if they exist | ||||
|                 String *defaultValue = helpRenderValue(cfgOptionDefault(optionId)); | ||||
|                 String *value = NULL; | ||||
|                 const String *defaultValue = helpRenderValue(cfgOptionDefault(optionId)); | ||||
|                 const String *value = NULL; | ||||
|  | ||||
|                 if (cfgOptionSource(optionId) != cfgSourceDefault) | ||||
|                     value = helpRenderValue(cfgOption(optionId)); | ||||
|   | ||||
| @@ -13,6 +13,7 @@ IO Buffer Filter | ||||
| Filter type constant | ||||
| ***********************************************************************************************************************************/ | ||||
| #define BUFFER_FILTER_TYPE                                          "buffer" | ||||
|     STRING_STATIC(BUFFER_FILTER_TYPE_STR,                           BUFFER_FILTER_TYPE); | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Object type | ||||
| @@ -43,7 +44,7 @@ ioBufferNew(void) | ||||
|  | ||||
|         // Create filter interface | ||||
|         this->filter = ioFilterNewP( | ||||
|             strNew(BUFFER_FILTER_TYPE), this, .inOut = (IoFilterInterfaceProcessInOut)ioBufferProcess, | ||||
|             BUFFER_FILTER_TYPE_STR, this, .inOut = (IoFilterInterfaceProcessInOut)ioBufferProcess, | ||||
|             .inputSame = (IoFilterInterfaceInputSame)ioBufferInputSame); | ||||
|     } | ||||
|     MEM_CONTEXT_NEW_END(); | ||||
|   | ||||
| @@ -13,6 +13,7 @@ IO Size Filter | ||||
| Filter type constant | ||||
| ***********************************************************************************************************************************/ | ||||
| #define SIZE_FILTER_TYPE                                            "size" | ||||
|     STRING_STATIC(SIZE_FILTER_TYPE_STR,                             SIZE_FILTER_TYPE) | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Object type | ||||
| @@ -42,7 +43,7 @@ ioSizeNew(void) | ||||
|  | ||||
|         // Create filter interface | ||||
|         this->filter = ioFilterNewP( | ||||
|             strNew(SIZE_FILTER_TYPE), this, .in = (IoFilterInterfaceProcessIn)ioSizeProcess, | ||||
|             SIZE_FILTER_TYPE_STR, this, .in = (IoFilterInterfaceProcessIn)ioSizeProcess, | ||||
|             .result = (IoFilterInterfaceResult)ioSizeResult); | ||||
|     } | ||||
|     MEM_CONTEXT_NEW_END(); | ||||
|   | ||||
| @@ -94,10 +94,10 @@ lockAcquireFile(const String *lockFile, TimeMSec lockTimeout, bool failOnNoLock) | ||||
|             // Error when requested | ||||
|             if (failOnNoLock) | ||||
|             { | ||||
|                 String *errorHint = NULL; | ||||
|                 const String *errorHint = NULL; | ||||
|  | ||||
|                 if (errNo == EWOULDBLOCK) | ||||
|                     errorHint = strNew("\nHINT: is another " PGBACKREST_NAME " process running?"); | ||||
|                     errorHint = STRING_CONST("\nHINT: is another " PGBACKREST_NAME " process running?"); | ||||
|                 else if (errNo == EACCES) | ||||
|                 { | ||||
|                     errorHint = strNewFmt( | ||||
|   | ||||
| @@ -929,7 +929,7 @@ Convert variant to a zero-terminated string for logging | ||||
| String * | ||||
| varToLog(const Variant *this) | ||||
| { | ||||
|     String *string = NULL; | ||||
|     const String *string = NULL; | ||||
|  | ||||
|     switch (varType(this)) | ||||
|     { | ||||
| @@ -941,13 +941,13 @@ varToLog(const Variant *this) | ||||
|  | ||||
|         case varTypeKeyValue: | ||||
|         { | ||||
|             string = strNew("KeyValue"); | ||||
|             string = STRING_CONST("KeyValue"); | ||||
|             break; | ||||
|         } | ||||
|  | ||||
|         case varTypeVariantList: | ||||
|         { | ||||
|             string = strNew("VariantList"); | ||||
|             string = STRING_CONST("VariantList"); | ||||
|             break; | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -16,6 +16,7 @@ Gzip Compress | ||||
| Filter type constant | ||||
| ***********************************************************************************************************************************/ | ||||
| #define GZIP_COMPRESS_FILTER_TYPE                                   "gzipCompress" | ||||
|     STRING_STATIC(GZIP_COMPRESS_FILTER_TYPE_STR,                    GZIP_COMPRESS_FILTER_TYPE); | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Object type | ||||
| @@ -66,7 +67,7 @@ gzipCompressNew(int level, bool raw) | ||||
|  | ||||
|         // Create filter interface | ||||
|         this->filter = ioFilterNewP( | ||||
|             strNew(GZIP_COMPRESS_FILTER_TYPE), this, .done = (IoFilterInterfaceDone)gzipCompressDone, | ||||
|             GZIP_COMPRESS_FILTER_TYPE_STR, this, .done = (IoFilterInterfaceDone)gzipCompressDone, | ||||
|             .inOut = (IoFilterInterfaceProcessInOut)gzipCompressProcess, | ||||
|             .inputSame = (IoFilterInterfaceInputSame)gzipCompressInputSame); | ||||
|     } | ||||
|   | ||||
| @@ -15,6 +15,7 @@ Gzip Decompress | ||||
| Filter type constant | ||||
| ***********************************************************************************************************************************/ | ||||
| #define GZIP_DECOMPRESS_FILTER_TYPE                                 "gzipDecompress" | ||||
|     STRING_STATIC(GZIP_DECOMPRESS_FILTER_TYPE_STR,                  GZIP_DECOMPRESS_FILTER_TYPE); | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Object type | ||||
| @@ -57,7 +58,7 @@ gzipDecompressNew(bool raw) | ||||
|  | ||||
|         // Create filter interface | ||||
|         this->filter = ioFilterNewP( | ||||
|             strNew(GZIP_DECOMPRESS_FILTER_TYPE), this, .done = (IoFilterInterfaceDone)gzipDecompressDone, | ||||
|             GZIP_DECOMPRESS_FILTER_TYPE_STR, this, .done = (IoFilterInterfaceDone)gzipDecompressDone, | ||||
|             .inOut = (IoFilterInterfaceProcessInOut)gzipDecompressProcess, | ||||
|             .inputSame = (IoFilterInterfaceInputSame)gzipDecompressInputSame); | ||||
|     } | ||||
|   | ||||
| @@ -10,6 +10,11 @@ Command and Option Configuration Definition | ||||
| #include "common/error.h" | ||||
| #include "config/define.h" | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Define global section name | ||||
| ***********************************************************************************************************************************/ | ||||
| STRING_EXTERN(CFGDEF_SECTION_GLOBAL_STR,                            CFGDEF_SECTION_GLOBAL) | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Map command names to ids and vice versa. | ||||
| ***********************************************************************************************************************************/ | ||||
|   | ||||
| @@ -17,11 +17,13 @@ typedef enum | ||||
| } ConfigDefSection; | ||||
|  | ||||
| #include "config/define.auto.h" | ||||
| #include "common/type/string.h" | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Define global section name | ||||
| ***********************************************************************************************************************************/ | ||||
| #define CFGDEF_SECTION_GLOBAL                                       "global" | ||||
|     STRING_DECLARE(CFGDEF_SECTION_GLOBAL_STR) | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Functions | ||||
|   | ||||
| @@ -22,6 +22,7 @@ Standard config file name and old default path and name | ||||
| ***********************************************************************************************************************************/ | ||||
| #define PGBACKREST_CONFIG_FILE                                      PGBACKREST_BIN ".conf" | ||||
| #define PGBACKREST_CONFIG_ORIG_PATH_FILE                            "/etc/" PGBACKREST_CONFIG_FILE | ||||
|     STRING_STATIC(PGBACKREST_CONFIG_ORIG_PATH_FILE_STR,             PGBACKREST_CONFIG_FILE) | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Prefix for environment variables | ||||
| @@ -108,7 +109,7 @@ convertToByte(String **value, double *valueDbl) | ||||
|     String *result = strLower(strDup(*value)); | ||||
|  | ||||
|     // Match the value against possible values | ||||
|     if (regExpMatchOne(strNew("^[0-9]+(kb|k|mb|m|gb|g|tb|t|pb|p|b)*$"), result)) | ||||
|     if (regExpMatchOne(STRING_CONST("^[0-9]+(kb|k|mb|m|gb|g|tb|t|pb|p|b)*$"), result)) | ||||
|     { | ||||
|         // Get the character array and size | ||||
|         const char *strArray = strPtr(result); | ||||
| @@ -315,7 +316,7 @@ cfgFileLoad(                                                        // NOTE: Pas | ||||
|  | ||||
|         // Get a list of conf files from the specified path -error on missing directory if the option was passed on the command line | ||||
|         StringList *list = storageListP( | ||||
|             storageLocal(), configIncludePath, .expression = strNew(".+\\.conf$"), .errorOnMissing = configIncludeRequired); | ||||
|             storageLocal(), configIncludePath, .expression = STRING_CONST(".+\\.conf$"), .errorOnMissing = configIncludeRequired); | ||||
|  | ||||
|         // If conf files are found, then add them to the config string | ||||
|         if (list != NULL && strLstSize(list) > 0) | ||||
| @@ -641,7 +642,7 @@ configParse(unsigned int argListSize, const char *argList[], bool resetLogLevel) | ||||
|             String *configString = cfgFileLoad(parseOptionList, | ||||
|                 strNew(cfgDefOptionDefault(commandDefId, cfgOptionDefIdFromId(cfgOptConfig))), | ||||
|                 strNew(cfgDefOptionDefault(commandDefId, cfgOptionDefIdFromId(cfgOptConfigIncludePath))), | ||||
|                 strNew(PGBACKREST_CONFIG_ORIG_PATH_FILE)); | ||||
|                 PGBACKREST_CONFIG_ORIG_PATH_FILE_STR); | ||||
|  | ||||
|             if (configString != NULL) | ||||
|             { | ||||
| @@ -663,7 +664,7 @@ configParse(unsigned int argListSize, const char *argList[], bool resetLogLevel) | ||||
|                 } | ||||
|  | ||||
|                 strLstAdd(sectionList, strNewFmt(CFGDEF_SECTION_GLOBAL ":%s", cfgCommandName(cfgCommand()))); | ||||
|                 strLstAdd(sectionList, strNew(CFGDEF_SECTION_GLOBAL)); | ||||
|                 strLstAdd(sectionList, CFGDEF_SECTION_GLOBAL_STR); | ||||
|  | ||||
|                 // Loop through sections to search for options | ||||
|                 for (unsigned int sectionIdx = 0; sectionIdx < strLstSize(sectionList); sectionIdx++) | ||||
| @@ -980,7 +981,8 @@ configParse(unsigned int argListSize, const char *argList[], bool resetLogLevel) | ||||
|                             String *value = strLstGet(parseOption->valueList, 0); | ||||
|  | ||||
|                             // If a numeric type check that the value is valid | ||||
|                             if (optionDefType == cfgDefOptTypeInteger || optionDefType == cfgDefOptTypeFloat || optionDefType == cfgDefOptTypeSize) | ||||
|                             if (optionDefType == cfgDefOptTypeInteger || optionDefType == cfgDefOptTypeFloat || | ||||
|                                 optionDefType == cfgDefOptTypeSize) | ||||
|                             { | ||||
|                                 double valueDbl = 0; | ||||
|  | ||||
|   | ||||
| @@ -19,6 +19,14 @@ Cryptographic Hash | ||||
| Filter type constant | ||||
| ***********************************************************************************************************************************/ | ||||
| #define CRYPTO_HASH_FILTER_TYPE                                     "hash" | ||||
|     STRING_STATIC(CRYPTO_HASH_FILTER_TYPE_STR,                      CRYPTO_HASH_FILTER_TYPE); | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Hash types | ||||
| ***********************************************************************************************************************************/ | ||||
| STRING_EXTERN(HASH_TYPE_MD5_STR,                                    HASH_TYPE_MD5) | ||||
| STRING_EXTERN(HASH_TYPE_SHA1_STR,                                   HASH_TYPE_SHA1) | ||||
| STRING_EXTERN(HASH_TYPE_SHA256_STR,                                 HASH_TYPE_SHA256) | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Object type | ||||
| @@ -72,7 +80,7 @@ cryptoHashNew(const String *type) | ||||
|  | ||||
|         // Create filter interface | ||||
|         this->filter = ioFilterNewP( | ||||
|             strNew(CRYPTO_HASH_FILTER_TYPE), this, .in = (IoFilterInterfaceProcessIn)cryptoHashProcess, | ||||
|             CRYPTO_HASH_FILTER_TYPE_STR, this, .in = (IoFilterInterfaceProcessIn)cryptoHashProcess, | ||||
|             .result = (IoFilterInterfaceResult)cryptoHashResult); | ||||
|     } | ||||
|     MEM_CONTEXT_NEW_END(); | ||||
|   | ||||
| @@ -18,8 +18,11 @@ typedef struct CryptoHash CryptoHash; | ||||
| Hash types | ||||
| ***********************************************************************************************************************************/ | ||||
| #define HASH_TYPE_MD5                                               "md5" | ||||
|     STRING_DECLARE(HASH_TYPE_MD5_STR) | ||||
| #define HASH_TYPE_SHA1                                              "sha1" | ||||
|     STRING_DECLARE(HASH_TYPE_SHA1_STR) | ||||
| #define HASH_TYPE_SHA256                                            "sha256" | ||||
|     STRING_DECLARE(HASH_TYPE_SHA256_STR) | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Constructor | ||||
|   | ||||
| @@ -19,9 +19,11 @@ Internal constants | ||||
| ***********************************************************************************************************************************/ | ||||
| #define INI_COPY_EXT                                                ".copy" | ||||
| #define INI_SECTION_BACKREST                                        "backrest" | ||||
|     STRING_STATIC(INI_SECTION_BACKREST_STR,                         INI_SECTION_BACKREST) | ||||
| #define INI_KEY_FORMAT                                              "backrest-format" | ||||
| #define INI_KEY_VERSION                                             "backrest-version" | ||||
|     STRING_STATIC(INI_KEY_FORMAT_STR,                               INI_KEY_FORMAT) | ||||
| #define INI_KEY_CHECKSUM                                            "backrest-checksum" | ||||
|     STRING_STATIC(INI_KEY_CHECKSUM_STR,                             INI_KEY_CHECKSUM) | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Object type | ||||
| @@ -45,7 +47,7 @@ infoHash(const Ini *ini) | ||||
|         FUNCTION_TEST_ASSERT(ini != NULL); | ||||
|     FUNCTION_TEST_END(); | ||||
|  | ||||
|     CryptoHash *result = cryptoHashNew(strNew(HASH_TYPE_SHA1)); | ||||
|     CryptoHash *result = cryptoHashNew(HASH_TYPE_SHA1_STR); | ||||
|  | ||||
|     MEM_CONTEXT_TEMP_BEGIN() | ||||
|     { | ||||
| @@ -77,8 +79,8 @@ infoHash(const Ini *ini) | ||||
|                 String *key = strLstGet(keyList, keyIdx); | ||||
|  | ||||
|                 // Skip the backrest checksum in the file | ||||
|                 if ((strEq(section, strNew(INI_SECTION_BACKREST)) && !strEq(key, strNew(INI_KEY_CHECKSUM))) || | ||||
|                     !strEq(section, strNew(INI_SECTION_BACKREST))) | ||||
|                 if ((strEq(section, INI_SECTION_BACKREST_STR) && !strEq(key, INI_KEY_CHECKSUM_STR)) || | ||||
|                     !strEq(section, INI_SECTION_BACKREST_STR)) | ||||
|                 { | ||||
|                     cryptoHashProcessC(result, (const unsigned char *)"\"", 1); | ||||
|                     cryptoHashProcessStr(result, key); | ||||
| @@ -121,7 +123,7 @@ infoValidInternal( | ||||
|     MEM_CONTEXT_TEMP_BEGIN() | ||||
|     { | ||||
|         // Make sure the ini is valid by testing the checksum | ||||
|         String *infoChecksum = varStr(iniGet(this->ini, strNew(INI_SECTION_BACKREST), strNew(INI_KEY_CHECKSUM))); | ||||
|         String *infoChecksum = varStr(iniGet(this->ini, INI_SECTION_BACKREST_STR, INI_KEY_CHECKSUM_STR)); | ||||
|  | ||||
|         CryptoHash *hash = infoHash(this->ini); | ||||
|  | ||||
| @@ -145,11 +147,12 @@ infoValidInternal( | ||||
|         } | ||||
|  | ||||
|         // Make sure that the format is current, otherwise error | ||||
|         if (varIntForce(iniGet(this->ini, strNew(INI_SECTION_BACKREST), strNew(INI_KEY_FORMAT))) != PGBACKREST_FORMAT) | ||||
|         if (varIntForce(iniGet(this->ini, INI_SECTION_BACKREST_STR, INI_KEY_FORMAT_STR)) != PGBACKREST_FORMAT) | ||||
|         { | ||||
|             String *fmtMsg = strNewFmt("invalid format in '%s', expected %d but found %d", | ||||
|                 strPtr(this->fileName), PGBACKREST_FORMAT, varIntForce(iniGet(this->ini, strNew(INI_SECTION_BACKREST), | ||||
|                 strNew(INI_KEY_FORMAT)))); | ||||
|             String *fmtMsg = strNewFmt( | ||||
|                 "invalid format in '%s', expected %d but found %d", | ||||
|                 strPtr(this->fileName), PGBACKREST_FORMAT, | ||||
|                 varIntForce(iniGet(this->ini, INI_SECTION_BACKREST_STR, INI_KEY_FORMAT_STR))); | ||||
|  | ||||
|             if (!ignoreError) | ||||
|             { | ||||
|   | ||||
| @@ -25,13 +25,19 @@ Internal constants | ||||
| ***********************************************************************************************************************************/ | ||||
| #define INFO_SECTION_DB                                             "db" | ||||
| #define INFO_SECTION_DB_HISTORY                                     INFO_SECTION_DB ":history" | ||||
|     STRING_STATIC(INFO_SECTION_DB_HISTORY_STR,                      INFO_SECTION_DB_HISTORY) | ||||
| #define INFO_SECTION_DB_MANIFEST                                    "backup:" INFO_SECTION_DB | ||||
|  | ||||
| #define INFO_KEY_DB_ID                                              "db-id" | ||||
|     STRING_STATIC(INFO_KEY_DB_ID_STR,                               INFO_KEY_DB_ID) | ||||
| #define INFO_KEY_DB_CATALOG_VERSION                                 "db-catalog-version" | ||||
|     STRING_STATIC(INFO_KEY_DB_CATALOG_VERSION_STR,                  INFO_KEY_DB_CATALOG_VERSION) | ||||
| #define INFO_KEY_DB_CONTROL_VERSION                                 "db-control-version" | ||||
|     STRING_STATIC(INFO_KEY_DB_CONTROL_VERSION_STR,                  INFO_KEY_DB_CONTROL_VERSION) | ||||
| #define INFO_KEY_DB_SYSTEM_ID                                       "db-system-id" | ||||
|     STRING_STATIC(INFO_KEY_DB_SYSTEM_ID_STR,                        INFO_KEY_DB_SYSTEM_ID) | ||||
| #define INFO_KEY_DB_VERSION                                         "db-version" | ||||
|     STRING_STATIC(INFO_KEY_DB_VERSION_STR,                          INFO_KEY_DB_VERSION) | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Object type | ||||
| @@ -75,11 +81,11 @@ infoPgNew(const Storage *storage, const String *fileName, InfoPgType type) | ||||
|         MEM_CONTEXT_TEMP_BEGIN() | ||||
|         { | ||||
|             const Ini *infoPgIni = infoIni(this->info); | ||||
|             const String *pgHistorySection = strNew(INFO_SECTION_DB_HISTORY); | ||||
|             const String *pgHistorySection = INFO_SECTION_DB_HISTORY_STR; | ||||
|             const StringList *pgHistoryKey = iniSectionKeyList(infoPgIni, pgHistorySection); | ||||
|             const Variant *idKey = varNewStr(strNew(INFO_KEY_DB_ID)); | ||||
|             const Variant *systemIdKey = varNewStr(strNew(INFO_KEY_DB_SYSTEM_ID)); | ||||
|             const Variant *versionKey = varNewStr(strNew(INFO_KEY_DB_VERSION)); | ||||
|             const Variant *idKey = varNewStr(INFO_KEY_DB_ID_STR); | ||||
|             const Variant *systemIdKey = varNewStr(INFO_KEY_DB_SYSTEM_ID_STR); | ||||
|             const Variant *versionKey = varNewStr(INFO_KEY_DB_VERSION_STR); | ||||
|  | ||||
|             // History must include at least one item or the file is corrupt | ||||
|             ASSERT(strLstSize(pgHistoryKey) > 0); | ||||
| @@ -108,8 +114,8 @@ infoPgNew(const Storage *storage, const String *fileName, InfoPgType type) | ||||
|                 // we must write them at least, even if we give up reading them. | ||||
|                 if (type == infoPgBackup || type == infoPgManifest) | ||||
|                 { | ||||
|                     const Variant *catalogVersionKey = varNewStr(strNew(INFO_KEY_DB_CATALOG_VERSION)); | ||||
|                     const Variant *controlVersionKey = varNewStr(strNew(INFO_KEY_DB_CONTROL_VERSION)); | ||||
|                     const Variant *catalogVersionKey = varNewStr(INFO_KEY_DB_CATALOG_VERSION_STR); | ||||
|                     const Variant *controlVersionKey = varNewStr(INFO_KEY_DB_CONTROL_VERSION_STR); | ||||
|  | ||||
|                     infoPgData.catalogVersion = (unsigned int)varUInt64Force(kvGet(pgDataKv, catalogVersionKey)); | ||||
|                     infoPgData.controlVersion = (unsigned int)varUInt64Force(kvGet(pgDataKv, controlVersionKey)); | ||||
|   | ||||
| @@ -313,7 +313,7 @@ pgVersionFromStr(const String *version) | ||||
|     MEM_CONTEXT_TEMP_BEGIN() | ||||
|     { | ||||
|         // If format is not number.number (9.4) or number only (10) then error | ||||
|         if (!regExpMatchOne(strNew("^[0-9]+[.]*[0-9]+$"), version)) | ||||
|         if (!regExpMatchOne(STRING_CONST("^[0-9]+[.]*[0-9]+$"), version)) | ||||
|             THROW_FMT(AssertError, "version %s format is invalid", strPtr(version)); | ||||
|  | ||||
|         // If there is a dot set the major and minor versions, else just the major | ||||
|   | ||||
| @@ -56,7 +56,7 @@ storageDriverPosixFileReadNew(StorageDriverPosix *storage, const String *name, b | ||||
|         this->handle = -1; | ||||
|  | ||||
|         this->interface = storageFileReadNewP( | ||||
|             strNew(STORAGE_DRIVER_POSIX_TYPE), this, | ||||
|             STORAGE_DRIVER_POSIX_TYPE_STR, this, | ||||
|             .ignoreMissing = (StorageFileReadInterfaceIgnoreMissing)storageDriverPosixFileReadIgnoreMissing, | ||||
|             .io = (StorageFileReadInterfaceIo)storageDriverPosixFileReadIo, | ||||
|             .name = (StorageFileReadInterfaceName)storageDriverPosixFileReadName); | ||||
|   | ||||
| @@ -77,7 +77,7 @@ storageDriverPosixFileWriteNew( | ||||
|         this->storage = storage; | ||||
|  | ||||
|         this->interface = storageFileWriteNewP( | ||||
|             strNew(STORAGE_DRIVER_POSIX_TYPE), this, .atomic = (StorageFileWriteInterfaceAtomic)storageDriverPosixFileWriteAtomic, | ||||
|             STORAGE_DRIVER_POSIX_TYPE_STR, this, .atomic = (StorageFileWriteInterfaceAtomic)storageDriverPosixFileWriteAtomic, | ||||
|             .createPath = (StorageFileWriteInterfaceCreatePath)storageDriverPosixFileWriteCreatePath, | ||||
|             .io = (StorageFileWriteInterfaceIo)storageDriverPosixFileWriteIo, | ||||
|             .modeFile = (StorageFileWriteInterfaceModeFile)storageDriverPosixFileWriteModeFile, | ||||
|   | ||||
| @@ -20,6 +20,11 @@ Posix Storage Driver | ||||
| #include "storage/driver/posix/storage.h" | ||||
| #include "storage/driver/posix/common.h" | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Driver type constant string | ||||
| ***********************************************************************************************************************************/ | ||||
| STRING_EXTERN(STORAGE_DRIVER_POSIX_TYPE_STR,                        STORAGE_DRIVER_POSIX_TYPE) | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Object type | ||||
| ***********************************************************************************************************************************/ | ||||
| @@ -55,7 +60,7 @@ storageDriverPosixNew( | ||||
|         this->memContext = MEM_CONTEXT_NEW(); | ||||
|  | ||||
|         this->interface = storageNewP( | ||||
|             strNew(STORAGE_DRIVER_POSIX_TYPE), path, modeFile, modePath, write, pathExpressionFunction, this, | ||||
|             STORAGE_DRIVER_POSIX_TYPE_STR, path, modeFile, modePath, write, pathExpressionFunction, this, | ||||
|             .exists = (StorageInterfaceExists)storageDriverPosixExists, .info = (StorageInterfaceInfo)storageDriverPosixInfo, | ||||
|             .list = (StorageInterfaceList)storageDriverPosixList, .move = (StorageInterfaceMove)storageDriverPosixMove, | ||||
|             .newRead = (StorageInterfaceNewRead)storageDriverPosixNewRead, | ||||
|   | ||||
| @@ -22,6 +22,7 @@ typedef struct StorageDriverPosix StorageDriverPosix; | ||||
| Driver type constant | ||||
| ***********************************************************************************************************************************/ | ||||
| #define STORAGE_DRIVER_POSIX_TYPE                                   "posix" | ||||
|     STRING_DECLARE(STORAGE_DRIVER_POSIX_TYPE_STR) | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Constructor | ||||
|   | ||||
| @@ -10,6 +10,12 @@ Storage Helper | ||||
| #include "storage/driver/posix/storage.h" | ||||
| #include "storage/helper.h" | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Storage path constants | ||||
| ***********************************************************************************************************************************/ | ||||
| STRING_EXTERN(STORAGE_SPOOL_ARCHIVE_IN_STR,                         STORAGE_SPOOL_ARCHIVE_IN); | ||||
| STRING_EXTERN(STORAGE_SPOOL_ARCHIVE_OUT_STR,                        STORAGE_SPOOL_ARCHIVE_OUT); | ||||
|  | ||||
| /*********************************************************************************************************************************** | ||||
| Local variables | ||||
| ***********************************************************************************************************************************/ | ||||
| @@ -88,7 +94,7 @@ storageLocal(void) | ||||
|         { | ||||
|             storageHelper.storageLocal = storageDriverPosixInterface( | ||||
|                 storageDriverPosixNew( | ||||
|                     strNew("/"), STORAGE_MODE_FILE_DEFAULT, STORAGE_MODE_PATH_DEFAULT, false, NULL)); | ||||
|                     FSLASH_STR, STORAGE_MODE_FILE_DEFAULT, STORAGE_MODE_PATH_DEFAULT, false, NULL)); | ||||
|         } | ||||
|         MEM_CONTEXT_END(); | ||||
|     } | ||||
| @@ -114,7 +120,7 @@ storageLocalWrite(void) | ||||
|         { | ||||
|             storageHelper.storageLocalWrite = storageDriverPosixInterface( | ||||
|                 storageDriverPosixNew( | ||||
|                     strNew("/"), STORAGE_MODE_FILE_DEFAULT, STORAGE_MODE_PATH_DEFAULT, true, NULL)); | ||||
|                     FSLASH_STR, STORAGE_MODE_FILE_DEFAULT, STORAGE_MODE_PATH_DEFAULT, true, NULL)); | ||||
|         } | ||||
|         MEM_CONTEXT_END(); | ||||
|     } | ||||
| @@ -204,7 +210,7 @@ storageRepo(void) | ||||
|  | ||||
|         MEM_CONTEXT_BEGIN(storageHelper.memContext) | ||||
|         { | ||||
|             storageHelper.walRegExp = regExpNew(strNew("^[0-F]{24}")); | ||||
|             storageHelper.walRegExp = regExpNew(STRING_CONST("^[0-F]{24}")); | ||||
|             storageHelper.storageRepo = storageRepoGet(cfgOptionStr(cfgOptRepoType), false); | ||||
|         } | ||||
|         MEM_CONTEXT_END(); | ||||
|   | ||||
| @@ -10,7 +10,9 @@ Storage Helper | ||||
| Storage path constants | ||||
| ***********************************************************************************************************************************/ | ||||
| #define STORAGE_SPOOL_ARCHIVE_IN                                    "<SPOOL:ARCHIVE:IN>" | ||||
|     STRING_DECLARE(STORAGE_SPOOL_ARCHIVE_IN_STR); | ||||
| #define STORAGE_SPOOL_ARCHIVE_OUT                                   "<SPOOL:ARCHIVE:OUT>" | ||||
|     STRING_DECLARE(STORAGE_SPOOL_ARCHIVE_OUT_STR); | ||||
|  | ||||
| #define STORAGE_REPO_ARCHIVE                                        "<REPO:ARCHIVE>" | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user