rpmio/macro.c File Reference

#include "system.h"
#include <stdarg.h>
#include <rpmio_internal.h>
#include <rpmmessages.h>
#include <rpmerr.h>
#include <rpmmacro.h>
#include "debug.h"

Include dependency graph for macro.c:

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 _PRINT_MACRO_TRACE   0
#define _PRINT_EXPAND_TRACE   0
#define MACRO_CHUNK_SIZE   16
#define SKIPBLANK(_s, _c)
#define SKIPNONBLANK(_s, _c)
#define COPYNAME(_ne, _s, _c)
#define COPYOPTS(_oe, _s, _c)
#define POPT_ERROR_NOARG   -10
#define POPT_ERROR_BADQUOTE   -15
#define POPT_ERROR_MALLOC   -21
#define POPT_ARGV_ARRAY_GROW_DELTA   5
#define _suffix(_s, _x)   (slen >= sizeof(_x) && !strcmp((_s)+slen-(sizeof(_x)-1), (_x)))

Typedefs

typedef MacroBuf_sMacroBuf
 Macro expansion state.

Functions

static int expandMacro (MacroBuf mb)
 The main macro recursion loop.
static void * _free (const void *p)
 Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.
static int compareMacroName (const void *ap, const void *bp)
 Compare macro entries by name (qsort/bsearch).
static void expandMacroTable (MacroContext mc)
 Enlarge macro table.
static void sortMacroTable (MacroContext mc)
 Sort entries in macro table.
void rpmDumpMacroTable (MacroContext mc, FILE *fp)
 Print macros to file stream.
static MacroEntryfindEntry (MacroContext mc, const char *name, size_t namelen)
 Find entry in macro table.
static char * rdcl (char *buf, size_t size, FD_t fd)
 fgets(3) analogue that reads \ continuations.
static const char * matchchar (const char *p, char pl, char pr)
 Return text between pl and matching pr characters.
static void printMacro (MacroBuf mb, const char *s, const char *se)
 Pre-print macro expression to be expanded.
static void printExpansion (MacroBuf mb, const char *t, const char *te)
 Post-print expanded macro expression.
static int expandT (MacroBuf mb, const char *f, size_t flen)
 Save source and expand field into target.
static int expandU (MacroBuf mb, char *u, size_t ulen)
 Save source/target and expand macro in u.
static int doShellEscape (MacroBuf mb, const char *cmd, size_t clen)
 Expand output of shell command into target buffer.
static const char * doDefine (MacroBuf mb, const char *se, int level, int expandbody)
 Parse (and execute) new macro definition.
static const char * doUndefine (MacroContext mc, const char *se)
 Parse (and execute) macro undefinition.
static void pushMacro (MacroEntry *mep, const char *n, const char *o, const char *b, int level)
 Push new macro definition onto macro entry stack.
static void popMacro (MacroEntry *mep)
 Pop macro definition from macro entry stack.
static void freeArgs (MacroBuf mb)
 Free parsed arguments for parameterized macro.
static const char * grabArgs (MacroBuf mb, const MacroEntry me, const char *se, const char *lastc)
 Parse arguments (to next new line) for parameterized macro.
static void doOutput (MacroBuf mb, int waserror, const char *msg, size_t msglen)
 Perform macro message output.
static void doFoo (MacroBuf mb, int negate, const char *f, size_t fn, const char *g, size_t gn)
 Execute macro primitives.
static int XpoptDupArgv (int argc, const char **argv, int *argcPtr, const char ***argvPtr)
static int XpoptParseArgvString (const char *s, int *argcPtr, const char ***argvPtr)
int rpmGlob (const char *patterns, int *argcPtr, const char ***argvPtr)
 Return URL path(s) from a (URL prefixed) pattern glob.
int expandMacros (void *spec, MacroContext mc, char *sbuf, size_t slen)
 Expand macro into buffer.
void addMacro (MacroContext mc, const char *n, const char *o, const char *b, int level)
 Add macro to context.
void delMacro (MacroContext mc, const char *n)
 Delete macro from context.
int rpmDefineMacro (MacroContext mc, const char *macro, int level)
 Define macro in context.
void rpmLoadMacros (MacroContext mc, int level)
 Load macros from specific context into global context.
int rpmLoadMacroFile (MacroContext mc, const char *fn)
 Load macro context from a macro file.
void rpmInitMacros (MacroContext mc, const char *macrofiles)
 Initialize macro context from set of macrofile(s).
void rpmFreeMacros (MacroContext mc)
 Destroy macro context.
int isCompressed (const char *file, rpmCompressedMagic *compressed)
 Return type of compression used in file.
char * rpmExpand (const char *arg,...)
 Return (malloc'ed) concatenated macro expansion(s).
int rpmExpandNumeric (const char *arg)
 Return macro expansion as a numeric value.
char * rpmCleanPath (char *path)
 Canonicalize file path.
const char * rpmGetPath (const char *path,...)
 Return (malloc'ed) expanded, canonicalized, file path.
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.

Variables

const char * rpmMacrofiles = MACROFILES
 List of macro files to read when configuring rpm.
static struct MacroContext_s rpmGlobalMacroContext_s
MacroContext rpmGlobalMacroContext = &rpmGlobalMacroContext_s
static struct MacroContext_s rpmCLIMacroContext_s
MacroContext rpmCLIMacroContext = &rpmCLIMacroContext_s
int max_macro_depth = 16
int print_macro_trace = 0
int print_expand_trace = 0
static int _debug = 0


Detailed Description

Definition in file macro.c.


Define Documentation

#define _MAX_MACRO_DEPTH   16

Definition at line 103 of file macro.c.

#define _PRINT_EXPAND_TRACE   0

Definition at line 111 of file macro.c.

#define _PRINT_MACRO_TRACE   0

Definition at line 107 of file macro.c.

#define _suffix ( _s,
_x   )     (slen >= sizeof(_x) && !strcmp((_s)+slen-(sizeof(_x)-1), (_x)))

#define COPYNAME ( _ne,
_s,
_c   ) 

Value:

{       SKIPBLANK(_s,_c);       \
        /*@-boundswrite@*/      \
        while(((_c) = *(_s)) && (xisalnum(_c) || (_c) == '_')) \
                *(_ne)++ = *(_s)++; \
        *(_ne) = '\0';          \
        /*@=boundswrite@*/      \
    }

Definition at line 479 of file macro.c.

Referenced by doDefine(), and doUndefine().

#define COPYOPTS ( _oe,
_s,
_c   ) 

Value:

{       /*@-boundswrite@*/      \
        while(((_c) = *(_s)) && (_c) != ')') \
                *(_oe)++ = *(_s)++; \
        *(_oe) = '\0';          \
        /*@=boundswrite@*/      \
    }

Definition at line 488 of file macro.c.

Referenced by doDefine().

#define isblank ( _c   )     ((_c) == ' ' || (_c) == '\t')

Definition at line 10 of file macro.c.

Referenced by doDefine(), doFoo(), expandMacro(), and grabArgs().

#define iseol ( _c   )     ((_c) == '\n' || (_c) == '\r')

Definition at line 12 of file macro.c.

Referenced by doDefine(), doShellEscape(), doUndefine(), expandMacro(), printExpansion(), printMacro(), and rdcl().

#define MACRO_CHUNK_SIZE   16

Definition at line 116 of file macro.c.

Referenced by expandMacroTable().

#define POPT_ARGV_ARRAY_GROW_DELTA   5

Definition at line 1592 of file macro.c.

Referenced by XpoptParseArgvString().

#define POPT_ERROR_BADQUOTE   -15

error in paramter quoting

Definition at line 1589 of file macro.c.

Referenced by XpoptParseArgvString().

#define POPT_ERROR_MALLOC   -21

memory allocation failed

Definition at line 1590 of file macro.c.

Referenced by XpoptDupArgv(), and XpoptParseArgvString().

#define POPT_ERROR_NOARG   -10

missing argument

Definition at line 1588 of file macro.c.

Referenced by XpoptDupArgv().

#define SAVECHAR ( _mb,
_c   )     { *(_mb)->t = (_c), (_mb)->t++, (_mb)->nb--; }

Definition at line 99 of file macro.c.

Referenced by doShellEscape(), and expandMacro().

#define SKIPBLANK ( _s,
_c   ) 

Value:

/*@-globs@*/    /* FIX: __ctype_b */ \
        while (((_c) = *(_s)) && isblank(_c)) \
                (_s)++;         \

Definition at line 467 of file macro.c.

Referenced by doDefine(), and rpmLoadMacroFile().

#define SKIPNONBLANK ( _s,
_c   ) 

Value:

/*@-globs@*/    /* FIX: __ctype_b */ \
        while (((_c) = *(_s)) && !(isblank(_c) || iseol(_c))) \
                (_s)++;         \

Definition at line 473 of file macro.c.

#define STREQ ( _t,
_f,
_fn   )     ((_fn) == (sizeof(_t)-1) && !strncmp((_t), (_f), (_fn)))

Definition at line 14 of file macro.c.

Referenced by doFoo(), and expandMacro().


Typedef Documentation

typedef struct MacroBuf_s * MacroBuf

Macro expansion state.


Function Documentation

static void* _free ( const void *  p  )  [inline, static]

Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.

Parameters:
p memory to free
Return values:
NULL always

Definition at line 131 of file macro.c.

void addMacro ( MacroContext  mc,
const char *  n,
const char *  o,
const char *  b,
int  level 
)

Add macro to context.

Deprecated:
Use rpmDefineMacro().
Parameters:
mc macro context (NULL uses global context).
n macro name
o macro paramaters
b macro body
level macro recursion level (0 is entry API)

Definition at line 1888 of file macro.c.

References _, expandMacroTable(), findEntry(), MacroContext_s::firstFree, MacroEntry_s::flags, MacroContext_s::macrosAllocated, MacroContext_s::macroTable, pushMacro(), RPMERR_BADSPEC, rpmError, rpmGlobalMacroContext, and sortMacroTable().

Referenced by addSource(), buildForTarget(), doDefine(), doReadRC(), doScript(), doSetupMacro(), expandMacro(), grabArgs(), handlePreambleTag(), headerMacrosLoad(), makeGPGSignature(), makePGPSignature(), parseSpec(), rpmLoadMacros(), rpmPlatform(), rpmrc_AddMacro(), rpmRebuildTargetVars(), rpmtsOpenSDB(), setDefaults(), setPathDefault(), and setVarDefault().

static int compareMacroName ( const void *  ap,
const void *  bp 
) [static]

Compare macro entries by name (qsort/bsearch).

Parameters:
ap 1st macro entry
bp 2nd macro entry
Returns:
result of comparison

Definition at line 147 of file macro.c.

References MacroEntry_s::name.

Referenced by findEntry(), and sortMacroTable().

void delMacro ( MacroContext  mc,
const char *  n 
)

Delete macro from context.

Parameters:
mc macro context (NULL uses global context).
n macro name

Definition at line 1927 of file macro.c.

References findEntry(), popMacro(), rpmGlobalMacroContext, and sortMacroTable().

Referenced by doScript(), doUndefine(), handlePreambleTag(), headerMacrosUnload(), makeGPGSignature(), makePGPSignature(), parseSpec(), rpmrc_DelMacro(), rpmRebuildTargetVars(), and rpmtsOpenSDB().

static const char* doDefine ( MacroBuf  mb,
const char *  se,
int  level,
int  expandbody 
) [static]

Parse (and execute) new macro definition.

Parameters:
mb macro expansion state
se macro definition to parse
level macro recursion level
expandbody should body be expanded?
Returns:
address to continue parsing

Definition at line 636 of file macro.c.

References _, addMacro(), COPYNAME, COPYOPTS, expandU(), isblank, iseol, matchchar(), MacroBuf_s::mc, RPMERR_BADSPEC, rpmError, SKIPBLANK, and xisalpha().

Referenced by expandMacro(), and rpmDefineMacro().

static void doFoo ( MacroBuf  mb,
int  negate,
const char *  f,
size_t  fn,
const char *  g,
size_t  gn 
) [static]

Execute macro primitives.

Parameters:
mb macro expansion state
negate should logic be inverted?
f beginning of field f
fn length of field f
g beginning of field g
gn length of field g

Definition at line 1119 of file macro.c.

References COMPRESSED_OTHER, expandT(), expandU(), isblank, isCompressed(), rpmIsVerbose, STREQ, urlPath(), and xisdigit().

Referenced by expandMacro().

static void doOutput ( MacroBuf  mb,
int  waserror,
const char *  msg,
size_t  msglen 
) [static]

Perform macro message output.

Parameters:
mb macro expansion state
waserror use rpmError()?
msg message to ouput
msglen no. of bytes in message

Definition at line 1094 of file macro.c.

References expandU(), RPMERR_BADSPEC, and rpmError.

Referenced by expandMacro().

static int doShellEscape ( MacroBuf  mb,
const char *  cmd,
size_t  clen 
) [static]

Expand output of shell command into target buffer.

Parameters:
mb macro expansion state
cmd shell command
clen no. bytes in shell command
Returns:
result of expansion

Definition at line 597 of file macro.c.

References expandU(), iseol, MacroBuf_s::nb, and SAVECHAR.

Referenced by expandMacro().

static const char* doUndefine ( MacroContext  mc,
const char *  se 
) [static]

Parse (and execute) macro undefinition.

Parameters:
mc macro context
se macro name to undefine
Returns:
address to continue parsing

Definition at line 773 of file macro.c.

References _, COPYNAME, delMacro(), iseol, RPMERR_BADSPEC, rpmError, and xisalpha().

Referenced by expandMacro().

static int expandMacro ( MacroBuf  mb  )  [static]

The main macro recursion loop.

Todo:
Dynamically reallocate target buffer.
Parameters:
mb macro expansion state
Returns:
0 on success, 1 on failure

Definition at line 1224 of file macro.c.

References _, addMacro(), alloca(), MacroEntry_s::body, MacroBuf_s::depth, doDefine(), doFoo(), doOutput(), doShellEscape(), doUndefine(), MacroBuf_s::expand_trace, expandT(), findEntry(), freeArgs(), grabArgs(), isblank, iseol, MacroBuf_s::macro_trace, matchchar(), max_macro_depth, MacroBuf_s::mc, MacroEntry_s::name, MacroBuf_s::nb, MacroEntry_s::opts, print_expand_trace, print_macro_trace, printExpansion(), printMacro(), RMIL_GLOBAL, rpmDumpMacroTable(), RPMERR_BADSPEC, rpmError, rpmLoadMacroFile(), MacroBuf_s::s, SAVECHAR, STREQ, MacroBuf_s::t, MacroEntry_s::used, xisalnum(), and xmalloc().

Referenced by expandMacros(), expandT(), and expandU().

int expandMacros ( void *  spec,
MacroContext  mc,
char *  sbuf,
size_t  slen 
)

Expand macro into buffer.

Deprecated:
Use rpmExpand().
Todo:
Eliminate from API.
Parameters:
spec cookie (unused)
mc macro context (NULL uses global context).
Return values:
sbuf input macro to expand, output expansion
Parameters:
slen size of buffer
Returns:
0 on success

Definition at line 1853 of file macro.c.

References _, alloca(), expandMacro(), print_expand_trace, print_macro_trace, RPMERR_BADSPEC, rpmError, and rpmGlobalMacroContext.

Referenced by addFileToTagAux(), copyNextLine(), processPackageFiles(), rpmExpand(), and rpmGetPath().

static void expandMacroTable ( MacroContext  mc  )  [static]

Enlarge macro table.

Parameters:
mc macro context

Definition at line 168 of file macro.c.

References MacroContext_s::firstFree, MACRO_CHUNK_SIZE, MacroContext_s::macrosAllocated, MacroContext_s::macroTable, xmalloc(), and xrealloc().

Referenced by addMacro().

static int expandT ( MacroBuf  mb,
const char *  f,
size_t  flen 
) [static]

Save source and expand field into target.

Parameters:
mb macro expansion state
f field
flen no. bytes in field
Returns:
result of expansion

Definition at line 504 of file macro.c.

References alloca(), expandMacro(), and MacroBuf_s::s.

Referenced by doFoo(), and expandMacro().

static int expandU ( MacroBuf  mb,
char *  u,
size_t  ulen 
) [static]

Save source/target and expand macro in u.

Parameters:
mb macro expansion state
u input macro, output expansion
ulen no. bytes in u buffer
Returns:
result of expansion

Definition at line 558 of file macro.c.

References alloca(), expandMacro(), MacroBuf_s::nb, MacroBuf_s::s, and MacroBuf_s::t.

Referenced by doDefine(), doFoo(), doOutput(), doShellEscape(), and grabArgs().

static MacroEntry* findEntry ( MacroContext  mc,
const char *  name,
size_t  namelen 
) [static]

Find entry in macro table.

Parameters:
mc macro context
name macro name
namelen no. of bytes
Returns:
address of slot in macro table with name (or NULL)

Definition at line 254 of file macro.c.

References alloca(), compareMacroName(), MacroContext_s::firstFree, MacroContext_s::macroTable, and rpmGlobalMacroContext.

static void freeArgs ( MacroBuf  mb  )  [static]

Free parsed arguments for parameterized macro.

Parameters:
mb macro expansion state

Definition at line 888 of file macro.c.

References _, MacroEntry_s::body, MacroBuf_s::depth, MacroContext_s::firstFree, MacroEntry_s::level, MacroContext_s::macroTable, MacroBuf_s::mc, MacroEntry_s::name, RPMERR_BADSPEC, rpmError, and MacroEntry_s::used.

Referenced by expandMacro().

static const char* grabArgs ( MacroBuf  mb,
const MacroEntry  me,
const char *  se,
const char *  lastc 
) [static]

Parse arguments (to next new line) for parameterized macro.

Todo:
Use popt rather than getopt to parse args.
Parameters:
mb macro expansion state
me macro entry slot
se arguments to parse
lastc stop parsing at lastc
Returns:
address to continue parsing

Definition at line 940 of file macro.c.

References _, addMacro(), alloca(), argv, MacroBuf_s::depth, expandU(), isblank, MacroBuf_s::mc, MacroEntry_s::name, MacroEntry_s::opts, RPMERR_BADSPEC, rpmError, and stpcpy().

Referenced by expandMacro().

int isCompressed ( const char *  file,
rpmCompressedMagic compressed 
)

Return type of compression used in file.

Parameters:
file name of file
Return values:
compressed address of compression type
Returns:
0 on success, 1 on I/O error

Definition at line 2101 of file macro.c.

References _, COMPRESSED_BZIP2, COMPRESSED_LZMA, COMPRESSED_LZOP, COMPRESSED_NOT, COMPRESSED_OTHER, COMPRESSED_ZIP, Fclose(), Ferror(), Fopen(), Fread(), Fstrerror(), RPMERR_BADSPEC, and rpmError.

Referenced by buildForTarget(), doFoo(), doPatch(), and doUntar().

static const char* matchchar ( const char *  p,
char  pl,
char  pr 
) [static]

Return text between pl and matching pr characters.

Parameters:
p start of text
pl left char, i.e. '[', '(', '{', etc.
pr right char, i.e. ']', ')', '}', etc.
Returns:
address of last char before pr (or NULL)

Definition at line 360 of file macro.c.

Referenced by doDefine(), and expandMacro().

static void popMacro ( MacroEntry mep  )  [static]

Pop macro definition from macro entry stack.

Parameters:
mep address of macro entry slot

Definition at line 862 of file macro.c.

References _free(), MacroEntry_s::body, MacroEntry_s::name, MacroEntry_s::opts, and MacroEntry_s::prev.

Referenced by delMacro().

static void printExpansion ( MacroBuf  mb,
const char *  t,
const char *  te 
) [static]

Post-print expanded macro expression.

Parameters:
mb macro expansion state
t current expansion string result
te end of string

Definition at line 430 of file macro.c.

References _, MacroBuf_s::depth, and iseol.

Referenced by expandMacro().

static void printMacro ( MacroBuf  mb,
const char *  s,
const char *  se 
) [static]

Pre-print macro expression to be expanded.

Parameters:
mb macro expansion state
s current expansion string
se end of string

Definition at line 386 of file macro.c.

References _, MacroBuf_s::depth, and iseol.

Referenced by expandMacro().

static void pushMacro ( MacroEntry mep,
const char *  n,
const char *  o,
const char *  b,
int  level 
) [static]

Push new macro definition onto macro entry stack.

Parameters:
mep address of macro entry slot
n macro name
o macro parameters (NULL if none)
b macro body (NULL becomes "")
level macro recursion level

Definition at line 825 of file macro.c.

References _free(), MacroEntry_s::name, xmalloc(), and xstrdup().

Referenced by addMacro().

static char* rdcl ( char *  buf,
size_t  size,
FD_t  fd 
) [static]

fgets(3) analogue that reads \ continuations.

Last newline always trimmed.

Parameters:
buf input buffer
size inbut buffer size (bytes)
fd file handle
Returns:
buffer, or NULL on end-of-file

Definition at line 297 of file macro.c.

References fdGetFILE, and iseol.

Referenced by rpmLoadMacroFile().

char* rpmCleanPath ( char *  path  ) 

Canonicalize file path.

Parameters:
path path to canonicalize (in-place)
Returns:
canonicalized path (malloc'ed)

Definition at line 2228 of file macro.c.

Referenced by db3open(), doLookup(), rpmdbMoveDatabase(), rpmdbRemoveDatabase(), rpmGetPath(), rpmioAccess(), and rpmQueryVerify().

int rpmDefineMacro ( MacroContext  mc,
const char *  macro,
int  level 
)

Define macro in context.

Parameters:
mc macro context (NULL uses global context).
macro macro name, options, body
level macro recursion level (0 is entry API)
Returns:
Todo:
Document.

Definition at line 1943 of file macro.c.

References alloca(), doDefine(), and rpmGlobalMacroContext.

Referenced by rpmcliAllArgCallback(), rpmdbRebuild(), and rpmLoadMacroFile().

void rpmDumpMacroTable ( MacroContext  mc,
FILE *  fp 
)

Print macros to file stream.

Parameters:
mc macro context (NULL uses global context).
fp file stream (NULL uses stderr).

Definition at line 212 of file macro.c.

References MacroContext_s::firstFree, MacroContext_s::macroTable, and rpmGlobalMacroContext.

Referenced by expandMacro(), and rpmShowRC().

char* rpmExpand ( const char *  arg,
  ... 
)

Return (malloc'ed) concatenated macro expansion(s).

Parameters:
arg macro(s) to expand (NULL terminates list)
Returns:
macro expansion (malloc'ed)

Definition at line 2162 of file macro.c.

References expandMacros(), stpcpy(), xmalloc(), xrealloc(), and xstrdup().

Referenced by addChangelog(), checkFiles(), checkForValidArchitectures(), checkPassPhrase(), cpio_doio(), db3New(), dbiTagsInit(), defaultMachine(), doPrimary(), doScript(), doSetupMacro(), fillOutMainPackage(), headerMacrosLoad(), headerMacrosUnload(), i18nTag(), ignoreDep(), makeGPGSignature(), makePGPSignature(), open_dso(), packageBinaries(), parseBuildInstallClean(), parseForRegexLang(), parseSpec(), rdToken(), readLine(), rpmcliAllArgCallback(), rpmcliImportPubkeys(), rpmcliQuery(), rpmdbNew(), rpmdbSetIteratorRE(), rpmdsCpuinfo(), rpmdsGetconf(), rpmdsLdconfig(), rpmdsPipe(), rpmdsSysinfo(), rpmExpandNumeric(), rpmfcClassify(), rpmfcExec(), rpmfcExpandAppend(), rpmfcGenerateDependsHelper(), rpmGetPassPhrase(), rpmgiNext(), rpmgiOpen(), rpmLookupSignatureType(), rpmnsParse(), rpmPlatform(), rpmReadConfigFiles(), rpmReadRC(), rpmRollback(), rpmShowRC(), rpmts_IDTXglob(), rpmtsAddInstallElement(), rpmtsFindPubkey(), rpmtsRollback(), rpmtsSolve(), runInstScript(), runScript(), skipFiles(), unsatisfiedDepend(), urlFind(), and writeRPM().

int rpmExpandNumeric ( const char *  arg  ) 

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.

Parameters:
arg macro to expand
Returns:
numeric value

Definition at line 2201 of file macro.c.

References _free(), and rpmExpand().

Referenced by build(), checkFiles(), dbiOpen(), genCpioListAndHeader(), main(), parseSpec(), processPackageFiles(), relocateFileList(), rpmcliQuery(), rpmcliVerify(), rpmdbInit(), rpmdbNew(), rpmdbOpen(), rpmdbRebuild(), rpmdbVerify(), rpmdsELF(), rpmErase(), rpmfcGenerateDepends(), rpmInstall(), rpmLeadVersion(), rpmRollback(), rpmts_Create(), rpmts_init(), rpmtsCreate(), rpmtsOpenSDB(), rpmtsRollback(), rpmtsRun(), skipFiles(), and unsatisfiedDepend().

void rpmFreeMacros ( MacroContext  mc  ) 

Destroy macro context.

Parameters:
mc macro context (NULL uses global context).

Definition at line 2074 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.

Referenced by build(), rpmcliFini(), and rpmspecQuery().

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.

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.

Parameters:
urlroot root URL (often path to chroot, or NULL)
urlmdir directory URL (often a directory, or NULL)
urlfile file URL (often a file, or NULL)
Returns:
expanded, merged, canonicalized path (malloc'ed)

Definition at line 2350 of file macro.c.

References _free(), alloca(), file, rpmGetPath(), URL_IS_DASH, and urlPath().

Referenced by addSource(), db3close(), db3open(), db_init(), doIcon(), doPatch(), doRmSource(), doScript(), doSetupMacro(), doUntar(), handlePreambleTag(), makeTempFile(), prepFetch(), processBinaryFile(), processMetadataFile(), processPackageFiles(), rpmdsNew(), rpmfcGenerateDepends(), rpmInstall(), and rpmpsmStage().

const char* rpmGetPath ( const char *  path,
  ... 
)

Return (malloc'ed) expanded, canonicalized, file path.

Parameters:
path macro(s) to expand (NULL terminates list)
Returns:
canonicalized path (malloc'ed)

Definition at line 2319 of file macro.c.

References expandM