diff --git a/CHANGES.md b/CHANGES.md index 540f3d0340..ce0e46c38e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1604,7 +1604,7 @@ There were no changes to the [Specification for the Unchained Index](https://tru - We completed partial ports for `chifra blocks`, `chifra transactions`, and `chifra traces`. In some cases, this changed the format of the output (especially for JSON output). In every case, we think the data has been improved. - Implemented `--articulate` across many tools in GoLang. (Thanks Dawid!) - We made significant improvements to the documentation including more examples for the API docs and cross links to data models from tools producing the same. -- We prepared all tools for using the GoLang `--cache` options (caching is not yet yet enabled in the GoLang code). (Thanks Dawid!) +- We prepared all tools for using the GoLang `--cache` options (caching is not yet enabled in the GoLang code). (Thanks Dawid!) - Better support for streaming output to various formats (including preliminary support for `.xlsx`). - Begun improvements for more useful and flexible connections to the RPC. @@ -1747,7 +1747,7 @@ There were no changes to the [Specification for the Unchained Index](https://tru - Removed `--tsx` option as unused. - Removed `--dump` option as unused. - Added `--sdk` option to output Python and Typescript SDKs. -- Separation of `CParameter` class from `CMember` class making publically presented `CParamater` much simple since most of the complications came from that class's use in makeClass. +- Separation of `CParameter` class from `CMember` class making publically presented `CParamater` much simpler since most of the complications came from that class's use in makeClass. **testRunner** @@ -1793,7 +1793,7 @@ With this release, we made a lot of improvements to the help file and the code. **chifra traces** -- An attempt was made to improve the data exported from this tool, as it was quite confused previously. There may be unforeseen breaking changes to the expotred data. +- An attempt was made to improve the data exported from this tool, as it was quite confused previously. There may be unforeseen breaking changes to the exported data. - Removed unused (and previously unimplemented) `--statediff` option. - Partial port to GoLang. See note above. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b499ee40d5..3940e5ab9c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,7 +20,7 @@ ## Did you make a formatting or cosmetic change? -- We use an automated formatters, therefor formatting-only changes will generally be closed without merging. +- We use an automated formatters, therefore formatting-only changes will generally be closed without merging. ## Would do have a feature request? diff --git a/README.md b/README.md index 1a6cb3602b..5153ab84a8 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ Let's look at the first subcommand, called `status`. chifra status ``` -If you get a bunch of data, congratulations, your installation is working. Try this command which shows every 10th block between the first and the 100,000th: +If you get a bunch of data, congratulations, your installation is working. Try this command which shows every 10th block between the first and the 100,000th: ```[shell] chifra blocks 0-100000:10 diff --git a/docs/content/api/openapi.yaml b/docs/content/api/openapi.yaml index c40a7caffe..57cfff14a3 100644 --- a/docs/content/api/openapi.yaml +++ b/docs/content/api/openapi.yaml @@ -57,7 +57,7 @@ info: "http://localhost:8080/blocks?blocks=100-110&cache=true" ``` - Cacheing speeds up repeat queries significantly. The cache options are + Caching speeds up repeat queries significantly. The cache options are particularly useful for calls to data-rich endpoints, like most endpoints in the "Accounts" collection. diff --git a/src/apps/chifra/internal/abis/doc.go b/src/apps/chifra/internal/abis/doc.go index 9e9abe5e1b..58567c7d81 100644 --- a/src/apps/chifra/internal/abis/doc.go +++ b/src/apps/chifra/internal/abis/doc.go @@ -6,5 +6,5 @@ * the code inside of 'EXISTING_CODE' tags. */ -// The chifra abis tool retrieves one or more ABI files for the given address(es). It searches for ABIs, sequentially, in the following locations: - the current working folder, - the TrueBlocks local cache, - Etherscan, - (in the future) ENS and Sourcify. While this tool may be used from the command line, its primary purpose is in support of the --articulate option for tools such as chifra export and chifra logs. If possible, the tool will follow proxied addresses searching for the ABI, but that does not always work. In that case, you may use the --proxy_for option. The --known option prints a list of semi-standard function signatures such as the ERC20 standard, ERC 721 standard, various functions from OpenZeppelin, various Uniswap functions, etc. As an optimization, the known signatures are searched first during articulation. The --encode option generates a 32-byte encoding for a given cannonical function or event signature. For functions, you may manually extract the first four bytes of the hash. The --find option is experimental. Please see the notes below for more information. +// Package abisPkg handles the chifra abis command. The tool retrieves one or more ABI files for the given address(es). It searches for ABIs, sequentially, in the following locations: - the current working folder, - the TrueBlocks local cache, - Etherscan, - (in the future) ENS and Sourcify. While this tool may be used from the command line, its primary purpose is in support of the --articulate option for tools such as chifra export and chifra logs. If possible, the tool will follow proxied addresses searching for the ABI, but that does not always work. In that case, you may use the --proxy_for option. The --known option prints a list of semi-standard function signatures such as the ERC20 standard, ERC 721 standard, various functions from OpenZeppelin, various Uniswap functions, etc. As an optimization, the known signatures are searched first during articulation. The --encode option generates a 32-byte encoding for a given cannonical function or event signature. For functions, you may manually extract the first four bytes of the hash. The --find option is experimental. Please see the notes below for more information. package abisPkg diff --git a/src/apps/chifra/internal/abis/output.go b/src/apps/chifra/internal/abis/output.go index 1d39f9169b..2d3e586f0c 100644 --- a/src/apps/chifra/internal/abis/output.go +++ b/src/apps/chifra/internal/abis/output.go @@ -42,7 +42,7 @@ func ServeAbis(w http.ResponseWriter, r *http.Request) error { return err } -// AbisInternal handles the internal workings of the abis command. Returns an error. +// AbisInternal handles the internal workings of the abis command. Returns an error. func (opts *AbisOptions) AbisInternal() error { var err error if err = opts.validateAbis(); err != nil { diff --git a/src/apps/chifra/internal/blocks/doc.go b/src/apps/chifra/internal/blocks/doc.go index ae3c91b499..88b92f02de 100644 --- a/src/apps/chifra/internal/blocks/doc.go +++ b/src/apps/chifra/internal/blocks/doc.go @@ -6,5 +6,5 @@ * the code inside of 'EXISTING_CODE' tags. */ -// The chifra blocks tool retrieves block data from your Ethereum node or, if previously cached, from the TrueBlocks cache. You may specify multiple blocks per invocation. By default, chifra blocks queries the full transactional details of the block (including receipts). You may optionally retrieve only the transaction hashes in the block (which is significantly faster). Additionally, you may also use this tool to retrieve uncle blocks at a give height. Another useful feature of chifra blocks is the ability to extract address appearances from a block. TrueBlocks uses a similar feature internally to build its index of appearances. This type of data is very insightful when studying end user behavior and chain-wide adoption analysis. +// Package blocksPkg handles the chifra blocks command. It retrieves block data from your Ethereum node or, if previously cached, from the TrueBlocks cache. You may specify multiple blocks per invocation. By default, queries the full transactional details of the block (including receipts). You may optionally retrieve only the transaction hashes in the block (which is significantly faster). Additionally, you may also use this tool to retrieve uncle blocks at a give height. Another useful feature of is the ability to extract address appearances from a block. TrueBlocks uses a similar feature internally to build its index of appearances. This type of data is very insightful when studying end user behavior and chain-wide adoption analysis. package blocksPkg diff --git a/src/apps/chifra/internal/chunks/doc.go b/src/apps/chifra/internal/chunks/doc.go index 6d44e7ddc7..bb2e33ba05 100644 --- a/src/apps/chifra/internal/chunks/doc.go +++ b/src/apps/chifra/internal/chunks/doc.go @@ -6,5 +6,5 @@ * the code inside of 'EXISTING_CODE' tags. */ -// The chifra chunks routine provides tools for interacting with, checking the validity of, cleaning up, and analyzing the Unchained Index. It provides options to list pins, the Manifest, summary data on the index, Bloom filters, addresses, and appearances. While still in its early stages, this tool will eventually allow users to clean their local index, clean their remote index, study the indexes, etc. Stay tuned. +// Package chunksPkg handles the chifra chunks command. It provides tools for interacting with, checking the validity of, cleaning up, and analyzing the Unchained Index. It provides options to list pins, the Manifest, summary data on the index, Bloom filters, addresses, and appearances. While still in its early stages, this tool will eventually allow users to clean their local index, clean their remote index, study the indexes, etc. Stay tuned. package chunksPkg diff --git a/src/apps/chifra/internal/config/doc.go b/src/apps/chifra/internal/config/doc.go index 469a12214f..c0db506702 100644 --- a/src/apps/chifra/internal/config/doc.go +++ b/src/apps/chifra/internal/config/doc.go @@ -6,5 +6,5 @@ * the code inside of 'EXISTING_CODE' tags. */ -// The chifra config program allows you to manage the various TrueBlocks caches. You may list all of the caches, some of the cache, or even individual caches either in terse or full detail. The cache of interest is specified with the modes option. TrueBlocks maintains caches for the index of address appearances, named addresses, abi files, as well as other data including blockchain data, and address monitors. +// Package configPkg handles the chifra config command. It allows you to manage the various TrueBlocks caches. You may list all of the caches, some of the cache, or even individual caches either in terse or full detail. The cache of interest is specified with the modes option. TrueBlocks maintains caches for the index of address appearances, named addresses, abi files, as well as other data including blockchain data, and address monitors. package configPkg diff --git a/src/apps/chifra/internal/daemon/doc.go b/src/apps/chifra/internal/daemon/doc.go index 6831f158df..ccaa70320c 100644 --- a/src/apps/chifra/internal/daemon/doc.go +++ b/src/apps/chifra/internal/daemon/doc.go @@ -6,5 +6,5 @@ * the code inside of 'EXISTING_CODE' tags. */ -// chifra daemon manages chifra's API server. Each of the chifra commands along with all of its options, are provided not only by the command line, but also the API server. We call this process the flame server, which is written in Go. chifra serve is an alias for the chifra daemon command. In the future, this daemon may also manage other long-running processes such as chifra scrape and chifra monitors, but for now, it's only managing the API server. The --grpc option turns on a GRPC server that may speed up certain command such as chifra names, although this option is experimental and therefore not recommended for production use. If the default port for the API server is in use, you may change it with the --port option. To get help for any command, please see the API documentation on our website. But, you may also run chifra --help or chifra <cmd> --help on your command line to get help. See below for an example of converting command line options to a call to the API. There's a one-to-one correspondence between the command line tools and options and the API routes and their options. +// Package daemonPkg handles the chifra daemon command. It manages chifra's API server. Each of the chifra commands along with all of its options, are provided not only by the command line, but also the API server. We call this process the flame server, which is written in Go. chifra serve is an alias for the command. In the future, this daemon may also manage other long-running processes such as chifra scrape and chifra monitors, but for now, it's only managing the API server. The --grpc option turns on a GRPC server that may speed up certain command such as chifra names, although this option is experimental and therefore not recommended for production use. If the default port for the API server is in use, you may change it with the --port option. To get help for any command, please see the API documentation on our website. But, you may also run chifra --help or chifra <cmd> --help on your command line to get help. See below for an example of converting command line options to a call to the API. There's a one-to-one correspondence between the command line tools and options and the API routes and their options. package daemonPkg diff --git a/src/apps/chifra/internal/explore/doc.go b/src/apps/chifra/internal/explore/doc.go index 195252c0af..1117681c78 100644 --- a/src/apps/chifra/internal/explore/doc.go +++ b/src/apps/chifra/internal/explore/doc.go @@ -6,5 +6,5 @@ * the code inside of 'EXISTING_CODE' tags. */ -// chifra explore opens Etherscan (and other explorers -- including our own) to the block identifier, transaction identifier, or address you specify. It's a handy (configurable) way to open an explorer from the command line, nothing more. +// Package explorePkg handles the chifra explore command. It opens Etherscan (and other explorers -- including our own) to the block identifier, transaction identifier, or address you specify. It's a handy (configurable) way to open an explorer from the command line, nothing more. package explorePkg diff --git a/src/apps/chifra/internal/export/doc.go b/src/apps/chifra/internal/export/doc.go index 30c7488e90..1ea1ba07fe 100644 --- a/src/apps/chifra/internal/export/doc.go +++ b/src/apps/chifra/internal/export/doc.go @@ -6,5 +6,5 @@ * the code inside of 'EXISTING_CODE' tags. */ -// The chifra export tools provides a major part of the functionality of the TrueBlocks system. Using the index of appearances created with chifra scrape and the list of transaction identifiers created with chifra list, chifra export completes the actual extraction of an address's transactional history from the node. You may use topics, fourbyte values at the start of a transaction's input data, and/or a log's source address or emitter to filter the results. You may also choose which portions of the Ethereum data structures (--transactions, --logs, --traces, etc.) as you wish. By default, the results of the extraction are delivered to your console, however, you may export the results to any database (with a little bit of work). The format of the data, its content and its destination are up to you. +// Package exportPkg handles the chifra export command. It provides a major part of the functionality of the TrueBlocks system. Using the index of appearances created with chifra scrape and the list of transaction identifiers created with chifra list, completes the actual extraction of an address's transactional history from the node. You may use topics, fourbyte values at the start of a transaction's input data, and/or a log's source address or emitter to filter the results. You may also choose which portions of the Ethereum data structures (--transactions, --logs, --traces, etc.) as you wish. By default, the results of the extraction are delivered to your console, however, you may export the results to any database (with a little bit of work). The format of the data, its content and its destination are up to you. package exportPkg diff --git a/src/apps/chifra/internal/init/doc.go b/src/apps/chifra/internal/init/doc.go index 2b6c367c29..ba3c4c0a54 100644 --- a/src/apps/chifra/internal/init/doc.go +++ b/src/apps/chifra/internal/init/doc.go @@ -6,5 +6,5 @@ * the code inside of 'EXISTING_CODE' tags. */ -// When invoked, chifra init reads a value from a smart contract called **The Unchained Index** (0x0c316b7042b419d07d343f2f4f5bd54ff731183d). This value (manifestHashMap) is an IPFS hash pointing to a pinned file (called the Manifest) that contains a large collection of other IPFS hashes. These other hashes point to each of the Bloom filter and Index Chunk. TrueBlocks periodically publishes the Manifest's hash to the smart contract. This makes the index available for our software to use and impossible for us to withhold. Both of these aspects of the manifest are by design. If you stop chifra init before it finishes, it will pick up again where it left off the next time you run it. Certain parts of the system (chifra list and chifra export for example) if you have not previously run chifra init or chifra scrape. You will be warned by the system until it's satisfied. If you run chifra init and allow it to complete, the next time you run chifra scrape, it will start where init finished. This means that only the blooms will be stored on your hard drive. Subsequent scraping will produce both chunks and blooms, although you can, if you wish delete chunks that are not being used. You may periodically run chifra init if you prefer not to scrape. +// Package initPkg handles the chifra init command. When invoked it reads a value from a smart contract called **The Unchained Index** (0x0c316b7042b419d07d343f2f4f5bd54ff731183d). This value (manifestHashMap) is an IPFS hash pointing to a pinned file (called the Manifest) that contains a large collection of other IPFS hashes. These other hashes point to each of the Bloom filter and Index Chunk. TrueBlocks periodically publishes the Manifest's hash to the smart contract. This makes the index available for our software to use and impossible for us to withhold. Both of these aspects of the manifest are by design. If you stop chifra init before it finishes, it will pick up again where it left off the next time you run it. Certain parts of the system (chifra list and chifra export for example) if you have not previously run chifra init or chifra scrape. You will be warned by the system until it's satisfied. If you run chifra init and allow it to complete, the next time you run chifra scrape, it will start where init finished. This means that only the blooms will be stored on your hard drive. Subsequent scraping will produce both chunks and blooms, although you can, if you wish delete chunks that are not being used. You may periodically run chifra init if you prefer not to scrape. package initPkg diff --git a/src/apps/chifra/internal/list/doc.go b/src/apps/chifra/internal/list/doc.go index c3da5eb0e3..8b53e8cfce 100644 --- a/src/apps/chifra/internal/list/doc.go +++ b/src/apps/chifra/internal/list/doc.go @@ -6,5 +6,5 @@ * the code inside of 'EXISTING_CODE' tags. */ -// chifra list takes one or more addresses, queries the index of appearances, and builds TrueBlocks monitors. A TrueBlocks monitor is a file that contains blockNumber.transactionIndex pairs (transaction identifiers) representing the history of the address. Because TrueBlocks only extracts data from the Ethereum node when it's requested, the first time you list an address it takes about a minute. Subsequent queries are much faster because TrueBlocks caches the results. Note that chifra list only queries the index, it does not extract the full transactional details. You may use chifra export for that. +// Package listPkg handles the chifra list command. It takes one or more addresses, queries the index of appearances, and builds TrueBlocks monitors. A TrueBlocks monitor is a file that contains blockNumber.transactionIndex pairs (transaction identifiers) representing the history of the address. Because TrueBlocks only extracts data from the Ethereum node when it's requested, the first time you list an address it takes about a minute. Subsequent queries are much faster because TrueBlocks caches the results. Note that chifra list only queries the index, it does not extract the full transactional details. You may use chifra export for that. package listPkg diff --git a/src/apps/chifra/pkg/rpc/get_block.go b/src/apps/chifra/pkg/rpc/get_block.go index 7ec1c4f036..6ff2694512 100644 --- a/src/apps/chifra/pkg/rpc/get_block.go +++ b/src/apps/chifra/pkg/rpc/get_block.go @@ -230,7 +230,7 @@ func loadBlock[Tx string | types.SimpleTransaction](conn *Connection, bn uint64, block = types.SimpleBlock[Tx]{ BlockNumber: blockNumber, - Timestamp: base.Timestamp(ts), // note that we turn Ethereum's timestamps into types.Timestamp upon read. + Timestamp: base.Timestamp(ts), // note that we turn Ethereum's timestamps into types. Timestamp upon read. Hash: base.HexToHash(rawBlock.Hash), ParentHash: base.HexToHash(rawBlock.ParentHash), GasLimit: gasLimit, diff --git a/src/apps/chifra/pkg/tslib/tsdb.go b/src/apps/chifra/pkg/tslib/tsdb.go index c3c548ccb0..3393335a15 100644 --- a/src/apps/chifra/pkg/tslib/tsdb.go +++ b/src/apps/chifra/pkg/tslib/tsdb.go @@ -130,7 +130,7 @@ func ClearCache(chain string) { } // FromBn is a local function that returns a Timestamp record given a blockNum. It -// loads the timestamp file into memory if it isn't already +// loads the timestamp file into memory if it isn't already loaded func FromBn(chain string, bn uint64) (*TimestampRecord, error) { cnt, err := NTimestamps(chain) if err != nil { diff --git a/src/apps/chifra/pkg/uniq/uniq_appearances.go b/src/apps/chifra/pkg/uniq/uniq_appearances.go index 8aa33a3d15..9e4b832b4e 100644 --- a/src/apps/chifra/pkg/uniq/uniq_appearances.go +++ b/src/apps/chifra/pkg/uniq/uniq_appearances.go @@ -182,7 +182,7 @@ func UniqFromTraces(chain string, traces []types.SimpleTrace, addrMap AddressBoo var mapSync sync.Mutex -// addAddressToMaps help keep track of appearances for an address. An appearance is inserted into `appsMap` +// addAddressToMaps helps keep track of appearances for an address. An appearance is inserted into `appsMap` // if we've never seen this appearance before. `appsMap` is used to build the appearance table when writing the // chunk. `addrMap` helps eliminate duplicates and is used to build the address table when writing the chunk. // Precompiles are ignored. If the given address string does not start with a lead `0x`, it is normalized. diff --git a/src/apps/chifra/pkg/usage/usage.go b/src/apps/chifra/pkg/usage/usage.go index f43fd80736..facc15180a 100644 --- a/src/apps/chifra/pkg/usage/usage.go +++ b/src/apps/chifra/pkg/usage/usage.go @@ -6,7 +6,7 @@ import ( "strings" ) -// Replace accepts an string and an arbitrary number of additional string parameters. It replaces +// Replace accepts a string and an arbitrary number of additional string parameters. It replaces // {N} in the string with the Nth additional string. func Replace(msg string, values ...string) string { ret := msg diff --git a/src/dev_tools/utillib/basenode.cpp b/src/dev_tools/utillib/basenode.cpp index 094027dbdc..bdfb7e7c16 100644 --- a/src/dev_tools/utillib/basenode.cpp +++ b/src/dev_tools/utillib/basenode.cpp @@ -26,7 +26,7 @@ namespace qblocks { //-------------------------------------------------------------------------------- CRuntimeClass CBaseNode::classCBaseNode; static CBuiltIn _biBaseNode(&CBaseNode::classCBaseNode, "CBaseNode", sizeof(CBaseNode), NULL, NULL); -vector<CBuiltIn> builtIns; // Keeps track of all the classes that have beebn registered +vector<CBuiltIn> builtIns; // Keeps track of all the classes that have been registered //-------------------------------------------------------------------------------- CBaseNode::CBaseNode(void) { @@ -643,7 +643,7 @@ string_q nextBasenodeChunk(const string_q& fieldIn, const CBaseNode* node) { string_q getNextChunk(string_q& fmtOut, NEXTCHUNKFUNC func, const void* data) { string_q chunk = fmtOut; if (!contains(fmtOut, "[")) { - // There are no more tokens. Return the last chunk and empty out the format + // There are no more tokens. Return the last chunk and empty out the format fmtOut = ""; return chunk; } @@ -658,7 +658,7 @@ string_q getNextChunk(string_q& fmtOut, NEXTCHUNKFUNC func, const void* data) { } // We've hit a token, toss the start token, look for a field and toss the last token - // leaving the remainder of the format in fmtOut. A field is found if we find a pair + // leaving the remainder of the format in fmtOut. A field is found if we find a pair // of squigglies). Save text inside the start token and outside the field in pre and post ASSERT(startsWith(fmtOut, '[')); diff --git a/src/dev_tools/utillib/json_token.cpp b/src/dev_tools/utillib/json_token.cpp index 27551f0374..a4ae3820be 100644 --- a/src/dev_tools/utillib/json_token.cpp +++ b/src/dev_tools/utillib/json_token.cpp @@ -210,7 +210,7 @@ bool decodeNumber_4(Token& token, Value& decoded) { const auto digit(static_cast<unsigned int>(c - '0')); if (value >= threshold) { // We've hit or exceeded the max value divided by 10 (rounded down). If - // a) we've only just touched the limit, meaing value == threshold, + // a) we've only just touched the limit, meaning value == threshold, // b) this is the last digit, or // c) it's small enough to fit in that rounding delta, we're okay. // Otherwise treat this number as a double to avoid overflow. diff --git a/src/dev_tools/utillib/json_value.cpp b/src/dev_tools/utillib/json_value.cpp index 04ae0027eb..9bac997712 100644 --- a/src/dev_tools/utillib/json_value.cpp +++ b/src/dev_tools/utillib/json_value.cpp @@ -136,7 +136,7 @@ ValueIteratorBase::computeDistance(const SelfType& other) const { // RogueWave STL, // which is the one used by default). // Using a portable hand-made version for non random iterator instead: - // return difference_type( std::distance( current_, other.current_ ) ); + // return difference_type( std::distance( current_, other.current_ ) ); difference_type myDistance = 0; for (std::map<CZString, Value>::iterator it = current_; it != other.current_; ++it) { ++myDistance; diff --git a/src/dev_tools/utillib/options_base.cpp b/src/dev_tools/utillib/options_base.cpp index 642a3e0e11..ee3ec176ec 100644 --- a/src/dev_tools/utillib/options_base.cpp +++ b/src/dev_tools/utillib/options_base.cpp @@ -212,7 +212,7 @@ bool COptionsBase::prepareArguments(int argCountIn, const char* argvIn[]) { if (!arg.empty()) argumentsOut3.push_back(arg); - // If we have a command file, we will use it, if not we will creat one and pretend we have one. + // If we have a command file, we will use it, if not we will create one and pretend we have one. string_q commandList = ""; for (auto arg : argumentsOut3) { commandList += (arg + " "); @@ -247,7 +247,7 @@ bool COptionsBase::standardOptions(string_q& cmdLine) { replaceAll(cmdLine, "--append", ""); } - // Note: check each item individual in case more than one appears on the command line + // Note: check each item individually in case more than one appears on the command line cmdLine += " "; replace(cmdLine, "--output ", "--output:"); diff --git a/src/dev_tools/utillib/sfos.cpp b/src/dev_tools/utillib/sfos.cpp index 5f085df539..7d2ae91631 100644 --- a/src/dev_tools/utillib/sfos.cpp +++ b/src/dev_tools/utillib/sfos.cpp @@ -170,7 +170,7 @@ string_q doCommand(const string_q& cmd, bool readStderr) { } if (system(theCommand.c_str())) {} // Don't remove cruft. Silences compiler warnings - // Check twice for existance since the previous command creates the file but may take some time + // Check twice for existence since the previous command creates the file but may take some time waitForCreate(filename); string_q ret; asciiFileToString(filename, ret);