2002-03-25 23:16:26 +03:00
# ifndef _H_MACRO_
# define _H_MACRO_
/** \ingroup rpmio
* \ file rpmio / rpmmacro . h
*/
/*! The structure used to store a macro. */
typedef /*@abstract@*/ struct MacroEntry_s {
struct MacroEntry_s * prev ; /*!< Macro entry stack. */
const char * name ; /*!< Macro name. */
const char * opts ; /*!< Macro parameters (a la getopt) */
const char * body ; /*!< Macro body. */
int used ; /*!< No. of expansions. */
int level ; /*!< Scoping level. */
} * MacroEntry ;
/*! The structure used to store the set of macros in a context. */
typedef /*@abstract@*/ struct MacroContext_s {
/*@owned@*/ /*@null@*/ MacroEntry * macroTable ; /*!< Macro entry table for context. */
int macrosAllocated ; /*!< No. of allocated macros. */
int firstFree ; /*!< No. of macros. */
} * MacroContext ;
/*@-redecl@*/
/*@checked@*/
extern MacroContext rpmGlobalMacroContext ;
/*@checked@*/
extern MacroContext rpmCLIMacroContext ;
/*@=redecl@*/
/** \ingroup rpmrc
* List of macro files to read when configuring rpm .
* This is a colon separated list of files . URI ' s are permitted as well ,
* identified by the token ' : //', so file paths must not begin with '//'.
*/
/*@-redecl@*/
/*@observer@*/ /*@unchecked@*/
extern const char * macrofiles ;
/*@=redecl@*/
/**
* Markers for sources of macros added throughout rpm .
*/
# define RMIL_DEFAULT -15
# define RMIL_MACROFILES -13
# define RMIL_RPMRC -11
# define RMIL_CMDLINE -7
# define RMIL_TARBALL -5
# define RMIL_SPEC -3
# define RMIL_OLDSPEC -1
# define RMIL_GLOBAL 0
# ifdef __cplusplus
extern " C " {
# endif
/**
* Print macros to file stream .
* @ param mc macro context ( NULL uses global context ) .
* @ param fp file stream ( NULL uses stderr ) .
*/
void rpmDumpMacroTable ( /*@null@*/ MacroContext mc ,
/*@null@*/ FILE * fp )
/*@globals rpmGlobalMacroContext,
fileSystem @ */
/*@modifies *fp, fileSystem @*/ ;
/**
* Expand macro into buffer .
* @ deprecated Use rpmExpand ( ) .
* @ todo Eliminate from API .
* @ param spec cookie ( unused )
* @ param mc macro context ( NULL uses global context ) .
* @ retval sbuf input macro to expand , output expansion
* @ param slen size of buffer
* @ return 0 on success
*/
int expandMacros ( /*@null@*/ void * spec , /*@null@*/ MacroContext mc ,
/*@in@*/ /*@out@*/ char * sbuf ,
size_t slen )
/*@globals rpmGlobalMacroContext,
fileSystem @ */
/*@modifies *sbuf, rpmGlobalMacroContext, fileSystem @*/ ;
/**
* Add macro to context .
* @ deprecated Use rpmDefineMacro ( ) .
* @ param mc macro context ( NULL uses global context ) .
* @ param n macro name
* @ param o macro paramaters
* @ param b macro body
* @ param level macro recursion level ( 0 is entry API )
*/
void addMacro ( /*@null@*/ MacroContext mc , const char * n ,
/*@null@*/ const char * o ,
/*@null@*/ const char * b , int level )
/*@globals rpmGlobalMacroContext@*/
/*@modifies mc, rpmGlobalMacroContext @*/ ;
/**
* Delete macro from context .
* @ param mc macro context ( NULL uses global context ) .
* @ param n macro name
*/
void delMacro ( /*@null@*/ MacroContext mc , const char * n )
/*@globals rpmGlobalMacroContext@*/
/*@modifies mc, rpmGlobalMacroContext @*/ ;
/**
* Define macro in context .
* @ param mc macro context ( NULL uses global context ) .
* @ param macro macro name , options , body
* @ param level macro recursion level ( 0 is entry API )
* @ return @ todo Document .
*/
int rpmDefineMacro ( /*@null@*/ MacroContext mc , const char * macro ,
int level )
/*@globals rpmGlobalMacroContext@*/
/*@modifies mc, rpmGlobalMacroContext @*/ ;
/**
* Load macros from specific context into global context .
* @ param mc macro context ( NULL does nothing ) .
* @ param level macro recursion level ( 0 is entry API )
*/
void rpmLoadMacros ( /*@null@*/ MacroContext mc , int level )
/*@globals rpmGlobalMacroContext@*/
/*@modifies rpmGlobalMacroContext @*/ ;
/**
* Initialize global macro context from set of macrofile ( s ) .
* @ param mc ( unused )
* @ param macrofiles colon separated list of macro files ( NULL does nothing )
*/
void rpmInitMacros ( /*@null@*/ MacroContext mc , const char * macrofiles )
/*@globals rpmGlobalMacroContext, rpmCLIMacroContext,
fileSystem @ */
/*@modifies rpmGlobalMacroContext, fileSystem @*/ ;
/**
* Destroy macro context .
* @ param mc macro context ( NULL uses global context ) .
*/
void rpmFreeMacros ( /*@null@*/ MacroContext mc )
/*@globals rpmGlobalMacroContext@*/
/*@modifies mc, rpmGlobalMacroContext @*/ ;
typedef enum rpmCompressedMagic_e {
COMPRESSED_NOT = 0 , /*!< not compressed */
COMPRESSED_OTHER = 1 , /*!< gzip can handle */
COMPRESSED_BZIP2 = 2 , /*!< bzip2 can handle */
2009-09-24 11:09:30 +04:00
COMPRESSED_ZIP = 3 , /*!< unzip can handle */
COMPRESSED_LZMA = 4 , /*!< lzma can handle */
COMPRESSED_XZ = 5 /*!< xz can handle */
2002-03-25 23:16:26 +03:00
} rpmCompressedMagic ;
/**
* Return type of compression used in file .
* @ param file name of file
* @ retval compressed address of compression type
* @ return 0 on success , 1 on I / O error
*/
int isCompressed ( const char * file ,
/*@out@*/ rpmCompressedMagic * compressed )
/*@globals fileSystem@*/
/*@modifies *compressed, fileSystem @*/ ;
/**
* Return ( malloc ' ed ) concatenated macro expansion ( s ) .
* @ param arg macro ( s ) to expand ( NULL terminates list )
* @ return macro expansion ( malloc ' ed )
*/
char * rpmExpand ( /*@null@*/ const char * arg , . . . )
2008-11-13 04:38:17 +03:00
__attribute__ ( ( sentinel ) )
2002-03-25 23:16:26 +03:00
/*@globals rpmGlobalMacroContext @*/
/*@modifies rpmGlobalMacroContext @*/ ;
/**
* Canonicalize file path .
* @ param path path to canonicalize ( in - place )
* @ return canonicalized path ( malloc ' ed )
*/
/*@null@*/ char * rpmCleanPath ( /*@null@*/ char * path )
/*@modifies *path @*/ ;
/**
* Return ( malloc ' ed ) expanded , canonicalized , file path .
* @ param path macro ( s ) to expand ( NULL terminates list )
* @ return canonicalized path ( malloc ' ed )
*/
/*@-redecl@*/ /* LCL: shrug */
const char * rpmGetPath ( /*@null@*/ const char * path , . . . )
2008-11-13 04:38:17 +03:00
__attribute__ ( ( sentinel ) )
2002-03-25 23:16:26 +03:00
/*@globals rpmGlobalMacroContext @*/
/*@modifies rpmGlobalMacroContext @*/ ;
/*@=redecl@*/
/**
* 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 .
* @ param urlroot root URL ( often path to chroot , or NULL )
* @ param urlmdir directory URL ( often a directory , or NULL )
* @ param urlfile file URL ( often a file , or NULL )
* @ return expanded , merged , canonicalized path ( malloc ' ed )
*/
/*@-redecl@*/ /* LCL: shrug */
const char * rpmGenPath ( /*@null@*/ const char * urlroot ,
/*@null@*/ const char * urlmdir ,
/*@null@*/ const char * urlfile )
/*@globals rpmGlobalMacroContext @*/
/*@modifies rpmGlobalMacroContext @*/ ;
/*@=redecl@*/
/**
* 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.
* @ param arg macro to expand
* @ return numeric value
*/
int rpmExpandNumeric ( const char * arg )
/*@globals rpmGlobalMacroContext @*/
/*@modifies rpmGlobalMacroContext @*/ ;
# ifdef __cplusplus
}
# endif
# endif /* _H_ MACRO_ */