#include "system.h"
#include <stdarg.h>
#include <rpmio_internal.h>
#include <rpmmessages.h>
#include <rpmerr.h>
#include <rpmmacro.h>
#include "debug.h"
Go to the source code of this file.
Data Structures | |
| struct | MacroBuf_s |
| Macro expansion state. More... | |
Defines | |
| #define | isblank(_c) ((_c) == ' ' || (_c) == '\t') |
| #define | iseol(_c) ((_c) == '\n' || (_c) == '\r') |
| #define | STREQ(_t, _f, _fn) ((_fn) == (sizeof(_t)-1) && !strncmp((_t), (_f), (_fn))) |
| #define | SAVECHAR(_mb, _c) { *(_mb)->t = (_c), (_mb)->t++, (_mb)->nb--; } |
| #define | MAX_MACRO_DEPTH 16 |
| #define | MACRO_CHUNK_SIZE 16 |
| #define | SKIPBLANK(_s, _c) |
| #define | SKIPNONBLANK(_s, _c) |
| #define | COPYNAME(_ne, _s, _c) |
| #define | COPYOPTS(_oe, _s, _c) |
| #define | COPYBODY(_be, _s, _c) |
Typedefs | |
| typedef MacroBuf_s * | MacroBuf |
| Macro expansion state. More... | |
Functions | |
| int | expandMacro (MacroBuf mb) |
| The main macro recursion loop. More... | |
| void * | _free (const void *p) |
| Wrapper to free(3), hides const compilation noise, permit NULL, return NULL. More... | |
| int | compareMacroName (const void *ap, const void *bp) |
| Compare macro entries by name (qsort/bsearch). More... | |
| void | expandMacroTable (MacroContext mc) |
| Enlarge macro table. More... | |
| void | sortMacroTable (MacroContext mc) |
| Sort entries in macro table. More... | |
| void | rpmDumpMacroTable (MacroContext mc, FILE *fp) |
| Print macros to file stream. More... | |
| MacroEntry * | findEntry (MacroContext mc, const char *name, size_t namelen) |
| Find entry in macro table. More... | |
| char * | rdcl (char *buf, size_t size, FD_t fd, int escapes) |
| fgets(3) analogue that reads \ continuations. More... | |
| const char * | matchchar (const char *p, char pl, char pr) |
| Return text between pl and matching pr characters. More... | |
| void | printMacro (MacroBuf mb, const char *s, const char *se) |
| Pre-print macro expression to be expanded. More... | |
| void | printExpansion (MacroBuf mb, const char *t, const char *te) |
| Post-print expanded macro expression. More... | |
| int | expandT (MacroBuf mb, const char *f, size_t flen) |
| Save source and expand field into target. More... | |
| int | expandU (MacroBuf mb, char *u, size_t ulen) |
| Save source/target and expand macro in u. More... | |
| int | doShellEscape (MacroBuf mb, const char *cmd, size_t clen) |
| Expand output of shell command into target buffer. More... | |
| const char * | doDefine (MacroBuf mb, const char *se, int level, int expandbody) |
| Parse (and execute) new macro definition. More... | |
| const char * | doUndefine (MacroContext mc, const char *se) |
| Parse (and execute) macro undefinition. More... | |
| void | pushMacro (MacroEntry *mep, const char *n, const char *o, const char *b, int level) |
| Push new macro definition onto macro entry stack. More... | |
| void | popMacro (MacroEntry *mep) |
| Pop macro definition from macro entry stack. More... | |
| void | freeArgs (MacroBuf mb) |
| Free parsed arguments for parameterized macro. More... | |
| const char * | grabArgs (MacroBuf mb, const MacroEntry me, const char *se, char lastc) |
| Parse arguments (to next new line) for parameterized macro. More... | |
| void | doOutput (MacroBuf mb, int waserror, const char *msg, size_t msglen) |
| Perform macro message output. More... | |
| void | doFoo (MacroBuf mb, int negate, const char *f, size_t fn, const char *g, size_t gn) |
| Execute macro primitives. More... | |
| int | expandMacros (void *spec, MacroContext mc, char *sbuf, size_t slen) |
| Expand macro into buffer. More... | |
| void | addMacro (MacroContext mc, const char *n, const char *o, const char *b, int level) |
| Add macro to context. More... | |
| void | delMacro (MacroContext mc, const char *n) |
| Delete macro from context. More... | |
| int | rpmDefineMacro (MacroContext mc, const char *macro, int level) |
| Define macro in context. More... | |
| void | rpmLoadMacros (MacroContext mc, int level) |
| Load macros from specific context into global context. More... | |
| void | rpmInitMacros (MacroContext mc, const char *macrofiles) |
| Initialize global macro context from set of macrofile(s). More... | |
| void | rpmFreeMacros (MacroContext mc) |
| Destroy macro context. More... | |
| int | isCompressed (const char *file, rpmCompressedMagic *compressed) |
| Return type of compression used in file. More... | |
| char * | rpmExpand (const char *arg,...) |
| Return (malloc'ed) concatenated macro expansion(s). More... | |
| int | rpmExpandNumeric (const char *arg) |
| Return macro expansion as a numeric value. More... | |
| char * | rpmCleanPath (char *path) |
| Canonicalize file path. More... | |
| const char * | rpmGetPath (const char *path,...) |
| Return (malloc'ed) expanded, canonicalized, file path. More... | |
| const char * | rpmGenPath (const char *urlroot, const char *urlmdir, const char *urlfile) |
| Merge 3 args into path, any or all of which may be a url. More... | |
Variables | |
| MacroContext_s | rpmGlobalMacroContext_s |
| MacroContext | rpmGlobalMacroContext = &rpmGlobalMacroContext_s |
| MacroContext_s | rpmCLIMacroContext_s |
| MacroContext | rpmCLIMacroContext = &rpmCLIMacroContext_s |
| int | max_macro_depth = 16 |
| int | print_macro_trace = 0 |
| int | print_expand_trace = 0 |
Definition in file macro.c.
|
|
Value: { \
while(((_c) = *(_s)) && !iseol(_c)) { \
if ((_c) == '\\') \
(_s)++; \
*(_be)++ = *(_s)++; \
} \
*(_be) = '\0'; \
\
}Definition at line 474 of file macro.c. Referenced by doDefine. |
|
|
Value: { SKIPBLANK(_s,_c); \
\
while(((_c) = *(_s)) && (xisalnum(_c) || (_c) == '_')) \
*(_ne)++ = *(_s)++; \
*(_ne) = '\0'; \
\
}Definition at line 457 of file macro.c. Referenced by doDefine, and doUndefine. |
|
|
Value: { \
while(((_c) = *(_s)) && (_c) != ')') \
*(_oe)++ = *(_s)++; \
*(_oe) = '\0'; \
\
}Definition at line 466 of file macro.c. Referenced by doDefine. |
|
|
Definition at line 10 of file macro.c. Referenced by doDefine, doFoo, expandMacro, and grabArgs. |
|
|
Definition at line 12 of file macro.c. Referenced by doDefine, doShellEscape, doUndefine, expandMacro, printExpansion, printMacro, and rdcl. |
|
|
Definition at line 112 of file macro.c. Referenced by expandMacroTable. |
|
|
|
|
|
Definition at line 91 of file macro.c. Referenced by doShellEscape, and expandMacro. |
|
|
Value: \
while (((_c) = *(_s)) && isblank(_c)) \
(_s)++; \Definition at line 445 of file macro.c. Referenced by doDefine, and rpmInitMacros. |
|
|
Value: |
|
|
Definition at line 14 of file macro.c. Referenced by doFoo, and expandMacro. |
|
|
Macro expansion state.
|
|
|
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
|
|
||||||||||||||||||||||||
|
Add macro to context.
Definition at line 1513 of file macro.c. References expandMacroTable, findEntry, MacroContext_s::firstFree, MacroContext_s::macrosAllocated, MacroContext_s::macroTable, pushMacro, rpmGlobalMacroContext, and sortMacroTable. |
|
||||||||||||
|
Compare macro entries by name (qsort/bsearch).
Definition at line 143 of file macro.c. References MacroEntry_s::name. Referenced by findEntry, and sortMacroTable. |
|
||||||||||||
|
Delete macro from context.
Definition at line 1539 of file macro.c. References findEntry, popMacro, rpmGlobalMacroContext, and sortMacroTable. |
|
||||||||||||||||||||
|
Parse (and execute) new macro definition.
Definition at line 625 of file macro.c. References _, addMacro, COPYBODY, COPYNAME, COPYOPTS, expandU, isblank, iseol, matchchar, SKIPBLANK, and xisalpha. Referenced by expandMacro, and rpmDefineMacro. |
|
||||||||||||||||||||||||||||
|
Execute macro primitives.
Definition at line 1053 of file macro.c. References COMPRESSED_OTHER, expandT, expandU, isblank, isCompressed, rpmCompressedMagic, STREQ, urlPath, and xisdigit. Referenced by expandMacro. |
|
||||||||||||||||||||
|
Perform macro message output.
Definition at line 1028 of file macro.c. References expandU. Referenced by expandMacro. |
|
||||||||||||||||
|
Expand output of shell command into target buffer.
Definition at line 586 of file macro.c. References expandU, iseol, and SAVECHAR. Referenced by expandMacro. |
|
||||||||||||
|
Parse (and execute) macro undefinition.
Definition at line 721 of file macro.c. References _, COPYNAME, delMacro, iseol, and xisalpha. Referenced by expandMacro. |
|
|
The main macro recursion loop.
Definition at line 1155 of file macro.c. References _, addMacro, MacroEntry_s::body, doDefine, doFoo, doOutput, doShellEscape, doUndefine, expandT, findEntry, freeArgs, grabArgs, isblank, iseol, matchchar, max_macro_depth, MacroEntry_s::name, MacroEntry_s::opts, print_expand_trace, print_macro_trace, printExpansion, printMacro, RMIL_GLOBAL, rpmDumpMacroTable, SAVECHAR, STREQ, MacroEntry_s::used, and xisalnum. Referenced by expandMacros, expandT, and expandU. |
|
||||||||||||||||||||
|
Expand macro into buffer.
Definition at line 1478 of file macro.c. References _, alloca, MacroBuf_s::depth, MacroBuf_s::expand_trace, expandMacro, MacroBuf_s::macro_trace, MacroBuf_s::mc, MacroBuf_s::nb, print_expand_trace, print_macro_trace, rpmGlobalMacroContext, MacroBuf_s::s, MacroBuf_s::spec, and MacroBuf_s::t. |
|
|
Enlarge macro table.
Definition at line 164 of file macro.c. References MACRO_CHUNK_SIZE, xmalloc, and xrealloc. Referenced by addMacro. |
|
||||||||||||||||
|
Save source and expand field into target.
Definition at line 493 of file macro.c. References alloca, and expandMacro. Referenced by doFoo, and expandMacro. |
|
||||||||||||||||
|
Save source/target and expand macro in u.
Definition at line 547 of file macro.c. References alloca, and expandMacro. Referenced by doDefine, doFoo, doOutput, doShellEscape, and grabArgs. |
|
||||||||||||||||
|
Find entry in macro table.
Definition at line 250 of file macro.c. References compareMacroName, MacroEntry_s::name, and rpmGlobalMacroContext. Referenced by addMacro, delMacro, expandMacro, headerAddI18NString, headerAddOrAppendEntry, headerAppendEntry, headerFindI18NString, headerGetRawEntry, headerIsEntry, headerModifyEntry, headerRemoveEntry, htGetEntry, htHasEntry, and intGetEntry. |
|
|
Free parsed arguments for parameterized macro.
Definition at line 830 of file macro.c. References _, MacroEntry_s::body, MacroContext_s::firstFree, MacroEntry_s::level, MacroContext_s::macroTable, MacroEntry_s::name, popMacro, sortMacroTable, and MacroEntry_s::used. Referenced by expandMacro. |
|
||||||||||||||||||||
|
Parse arguments (to next new line) for parameterized macro.
Definition at line 882 of file macro.c. References _, addMacro, alloca, expandU, isblank, and stpcpy. Referenced by expandMacro. |
|
||||||||||||
|
Return type of compression used in file.
Definition at line 1687 of file macro.c. References _, COMPRESSED_BZIP2, COMPRESSED_NOT, COMPRESSED_OTHER, COMPRESSED_ZIP, Fclose, Ferror, Fopen, Fread, Fstrerror, and rpmCompressedMagic. |
|
||||||||||||||||
|
Return text between pl and matching pr characters.
Definition at line 338 of file macro.c. Referenced by doDefine, and expandMacro. |
|
|
Pop macro definition from macro entry stack.
Definition at line 804 of file macro.c. References _free, MacroEntry_s::body, MacroEntry_s::name, MacroEntry_s::opts, and MacroEntry_s::prev. |
|
||||||||||||||||
|
Post-print expanded macro expression.
Definition at line 408 of file macro.c. Referenced by expandMacro. |
|
||||||||||||||||
|
Pre-print macro expression to be expanded.
Definition at line 364 of file macro.c. Referenced by expandMacro. |
|
||||||||||||||||||||||||
|
Push new macro definition onto macro entry stack.
Definition at line 773 of file macro.c. References _free, MacroEntry_s::body, MacroEntry_s::level, MacroEntry_s::name, MacroEntry_s::opts, MacroEntry_s::prev, MacroEntry_s::used, xmalloc, and xstrdup. Referenced by addMacro. |
|
||||||||||||||||||||
|
fgets(3) analogue that reads \ continuations. Last newline always trimmed.
Definition at line 296 of file macro.c. References fdGetFILE, and iseol. Referenced by rpmInitMacros. |
|
|
Canonicalize file path.
Definition at line 1789 of file macro.c. References begin. |
|
||||||||||||||||
|
Define macro in context.
Definition at line 1555 of file macro.c. References alloca, doDefine, MacroBuf_s::mc, and rpmGlobalMacroContext. |
|
||||||||||||
|
Print macros to file stream.
Definition at line 208 of file macro.c. References _, MacroEntry_s::body, MacroContext_s::firstFree, MacroEntry_s::level, MacroContext_s::macroTable, MacroEntry_s::name, MacroEntry_s::opts, rpmGlobalMacroContext, and MacroEntry_s::used. |
|
||||||||||||
|
Return (malloc'ed) concatenated macro expansion(s).
Definition at line 1739 of file macro.c. References expandMacros, stpcpy, and xstrdup. |
|
|
Return macro expansion as a numeric value. Boolean values ('Y' or 'y' returns 1, 'N' or 'n' returns 0) are permitted as well. An undefined macro returns 0.
|
|
|
Destroy macro context.
Definition at line 1660 of file macro.c. References _free, MacroEntry_s::body, MacroContext_s::firstFree, MacroContext_s::macroTable, MacroEntry_s::name, MacroEntry_s::opts, MacroEntry_s::prev, and rpmGlobalMacroContext. |
|
||||||||||||||||
|
Merge 3 args into path, any or all of which may be a url. The leading part of the first URL encountered is used for the result, other URL prefixes are discarded, permitting a primitive form of URL inheiritance.
Definition at line 1908 of file macro.c. References _free, alloca, rpmGetPath, URL_IS_DASH, and urlPath. |
|
||||||||||||
|
Return (malloc'ed) expanded, canonicalized, file path.
Definition at line 1877 of file macro.c. References expandMacros, rpmCleanPath, stpcpy, and xstrdup. |
|
||||||||||||
|
Initialize global macro context from set of macrofile(s).
Definition at line 1589 of file macro.c. References _free, Fclose, Ferror, Fopen, getenv, max_macro_depth, rdcl, RMIL_CMDLINE, RMIL_MACROFILES, rpmCLIMacroContext, rpmDefineMacro, rpmGlobalMacroContext, rpmLoadMacros, SKIPBLANK, and xstrdup. |
|
||||||||||||
|
Load macros from specific context into global context.
Definition at line 1568 of file macro.c. References addMacro, MacroEntry_s::body, MacroContext_s::firstFree, MacroContext_s::macroTable, MacroEntry_s::name, MacroEntry_s::opts, and rpmGlobalMacroContext. |
|
|
Sort entries in macro table.
Definition at line 187 of file macro.c. References compareMacroName. |
|
|
Definition at line 97 of file macro.c. Referenced by expandMacro, and rpmInitMacros. |
|
|
Definition at line 108 of file macro.c. Referenced by expandMacro, and expandMacros. |
|
|
Definition at line 106 of file macro.c. Referenced by expandMacro, and expandMacros. |
|
|
Definition at line 70 of file macro.c. Referenced by rpmInitMacros. |
|
|
|
|
|
Definition at line 65 of file macro.c. Referenced by addMacro, delMacro, expandMacros, findEntry, rpmDefineMacro, rpmDumpMacroTable, rpmFreeMacros, rpmInitMacros, and rpmLoadMacros. |
|
|
|
1.2.14 written by Dimitri van Heesch,
© 1997-2002