#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. |
|
|