diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2007-09-04 08:49:45 +0000 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2007-09-04 08:49:45 +0000 |
| commit | a3cb276a2b048ce94b04e95b3ac87f323e075712 (patch) | |
| tree | 328d5652de04f8f4fad8a5f533447b2e64466420 /src | |
| parent | 425502d5d07b4e508befa5aba0a266eeb8a6cd31 (diff) | |
| download | libbu++-a3cb276a2b048ce94b04e95b3ac87f323e075712.tar.gz libbu++-a3cb276a2b048ce94b04e95b3ac87f323e075712.tar.bz2 libbu++-a3cb276a2b048ce94b04e95b3ac87f323e075712.tar.xz libbu++-a3cb276a2b048ce94b04e95b3ac87f323e075712.zip | |
Added the Bu::FString::expand() function, which expands the string in place
using system variables and special tokens, such as ~name and ~/...
I like this, and think that it's ample precedent for adding things like
format(), formatAppend(), and formatPrepend(), which would all rock.
Diffstat (limited to 'src')
| -rw-r--r-- | src/fstring.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/fstring.h b/src/fstring.h index 63e1e1a..9de6a56 100644 --- a/src/fstring.h +++ b/src/fstring.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #include <stdint.h> | 4 | #include <stdint.h> |
| 5 | #include <string> | 5 | #include <string> |
| 6 | #include <memory> | 6 | #include <memory> |
| 7 | #include <wordexp.h> | ||
| 7 | #include "bu/archival.h" | 8 | #include "bu/archival.h" |
| 8 | #include "bu/archive.h" | 9 | #include "bu/archive.h" |
| 9 | #include "bu/hash.h" | 10 | #include "bu/hash.h" |
| @@ -397,6 +398,31 @@ namespace Bu | |||
| 397 | append( pData, nSize ); | 398 | append( pData, nSize ); |
| 398 | } | 399 | } |
| 399 | 400 | ||
| 401 | void expand() | ||
| 402 | { | ||
| 403 | flatten(); | ||
| 404 | |||
| 405 | wordexp_t result; | ||
| 406 | |||
| 407 | /* Expand the string for the program to run. */ | ||
| 408 | switch (wordexp (pFirst->pData, &result, 0)) | ||
| 409 | { | ||
| 410 | case 0: /* Successful. */ | ||
| 411 | { | ||
| 412 | set( result.we_wordv[0] ); | ||
| 413 | wordfree( &result ); | ||
| 414 | return; | ||
| 415 | } | ||
| 416 | break; | ||
| 417 | case WRDE_NOSPACE: | ||
| 418 | /* If the error was `WRDE_NOSPACE', | ||
| 419 | then perhaps part of the result was allocated. */ | ||
| 420 | wordfree (&result); | ||
| 421 | default: /* Some other error. */ | ||
| 422 | return; | ||
| 423 | } | ||
| 424 | } | ||
| 425 | |||
| 400 | /** | 426 | /** |
| 401 | * Assignment operator. | 427 | * Assignment operator. |
| 402 | *@param rSrc (const MyType &) The FString to set your FString to. | 428 | *@param rSrc (const MyType &) The FString to set your FString to. |
