--- afd-1.3.6/src/common/change_name.c.old 2007-06-07 05:50:16.000000000 +0200 +++ afd-1.3.6/src/common/change_name.c 2008-02-15 09:10:39.000000000 +0100 @@ -630,23 +630,62 @@ ptr_rule++; if (isdigit((int)*ptr_rule)) { - if ((alternate % (*ptr_rule - '0')) == 0) - { - *ptr_newname = '0'; - } - else - { - } + *ptr_newname = '0' + (alternate % (*ptr_rule + 1 - '0')); + ptr_rule++; ptr_newname++; } else { system_log(WARN_SIGN, __FILE__, __LINE__, - "Illegal character (%c) found in rule %s", + "Illegal character (%c - not a decimal digit) found in rule %s", *ptr_rule, rename_to_rule); } break; + case 'h' : /* Hexadecimal. */ + { + char ul_char; /* Upper/lower character. */ + + ptr_rule++; + if ((*ptr_rule >= '0') && (*ptr_rule <= '9')) + { + number = *ptr_rule + 1 - '0'; + } + else if ((*ptr_rule >= 'A') && (*ptr_rule <= 'F')) + { + number = 10 + *ptr_rule + 1 - 'A'; + ul_char = 'A'; + } + else if ((*ptr_rule >= 'a') && (*ptr_rule <= 'f')) + { + number = 10 + *ptr_rule + 1 - 'a'; + ul_char = 'a'; + } + else + { + system_log(WARN_SIGN, __FILE__, __LINE__, + "Illegal character (%c - not a hexadecimal digit) found in rule %s", + *ptr_rule, rename_to_rule); + number = -1; + } + + if (number != -1) + { + number = alternate % number; + if (number >= 10) + { + *ptr_newname = ul_char + number - 10; + } + else + { + *ptr_newname = '0' + number; + } + ptr_rule++; + ptr_newname++; + } + } + break; + default : /* Unknown character - ignore */ system_log(WARN_SIGN, __FILE__, __LINE__, "Illegal character (%c) found in rule %s",