… | |
… | |
851 | CODE: |
851 | CODE: |
852 | { |
852 | { |
853 | STRLEN plen; |
853 | STRLEN plen; |
854 | U8 *path = (U8 *)SvPV (pathsv, plen); |
854 | U8 *path = (U8 *)SvPV (pathsv, plen); |
855 | U8 *pend = path + plen; |
855 | U8 *pend = path + plen; |
856 | U8 dst [plen * 6 * 3], *dstp = dst; |
856 | U8 dst [plen * 8 * 3], *dstp = dst; |
857 | |
857 | |
858 | while (path < pend) |
858 | while (path < pend) |
859 | { |
859 | { |
860 | U8 ch = *path; |
860 | U8 ch = *path; |
861 | |
861 | |
… | |
… | |
863 | *dstp++ = *path++; |
863 | *dstp++ = *path++; |
864 | else if (ch >= 'A' && ch <= 'Z') |
864 | else if (ch >= 'A' && ch <= 'Z') |
865 | *dstp++ = *path++ + ('a' - 'A'); |
865 | *dstp++ = *path++ + ('a' - 'A'); |
866 | else if (ch >= '0' && ch <= '9') |
866 | else if (ch >= '0' && ch <= '9') |
867 | { |
867 | { |
|
|
868 | /* version sort, up to 8 digits */ |
868 | STRLEN el, nl = 0; |
869 | STRLEN el, nl = 0; |
869 | while (*path >= '0' && *path <= '9' && path < pend) |
870 | while (*path >= '0' && *path <= '9' && path < pend) |
870 | path++, nl++; |
871 | path++, nl++; |
871 | |
872 | |
872 | for (el = nl; el < 6; el++) |
873 | for (el = nl; el < 8; el++) |
873 | *dstp++ = '0'; |
874 | *dstp++ = '0'; |
874 | |
875 | |
875 | memcpy (dstp, path - nl, nl); |
876 | memcpy (dstp, path - nl, nl); |
876 | dstp += nl; |
877 | dstp += nl; |
877 | } |
878 | } |