#include #include /* rindex strlen */ #include /* rindex strlen */ #include #define xmalloc malloc char *logfile; char *indfile; void test(const char *idxfile, int idxcount, int fsti) { #define REPLACESUFFIXNAME(_fname_, _suffix_) \ if (!_fname_ && (idxcount - fsti > 0)) { \ char *extp = strrchr((const char *)idxfile, '.'); \ int length = strlen((const char *)idxfile); \ \ if ( extp ) \ length -= strlen(extp); \ \ _fname_ = (char *)xmalloc(length + sizeof(_suffix_) + 1); \ (void)sprintf(_fname_, "%*.*s%s", length, length, idxfile, _suffix_); \ } REPLACESUFFIXNAME(indfile, ".ind"); REPLACESUFFIXNAME(logfile, ".ilg"); } int main(int argc, char **argv) { int idxcount = 1; int fsti = 0; int i; for ( i = 1; i < argc; i++ ) { test(argv[i], idxcount, fsti); printf("%s=[%s]\n", "idxfile", argv[i]); printf("%s=[%s]\n", "indfile", indfile); free(indfile); indfile=NULL; printf("%s=[%s]\n", "logfile", logfile); free(logfile); logfile=NULL; } }