StringCopy

PWCHAR StringCopyW(PWCHAR String1, LPCWSTR String2)
{
    PWCHAR p = String1;

    while ((*p++ = *String2++) != 0);

    return String1;
}

PWCHAR StringCopyW2(PWCHAR String1, LPCWSTR String2)
{
    PWCHAR p = String1;

    while (*String2)
        *p++ = *String2++;

    *p = L'\0';

    return String1;
}

PWCHAR StringCopyW3(PWCHAR String1, LPCWSTR String2)
{
    SIZE_T i = 0;

    while (String2[i] != L'\0')
    {
        String1[i] = String2[i];
        i++;
    }

    String1[i] = L'\0';

    return String1;
}

PWCHAR StringCopyNW(PWCHAR String1, LPCWSTR String2, SIZE_T MaxCount)
{
    PWCHAR p = String1;

    while (MaxCount-- && (*p++ = *String2++) != L'\0');

    if (MaxCount == (SIZE_T)-1 && p > String1)
        *(p - 1) = L'\0';

    return String1;
}

PWCHAR StringCopyW4(PWCHAR String1, LPCWSTR String2)
{
    PWCHAR p = String1;

    if (((ULONG_PTR)p & 7) == 0 && ((ULONG_PTR)String2 & 7) == 0)
    {
        PULONG64 p64 = (PULONG64)p;
        PULONG64 s64 = (PULONG64)String2;

        while (TRUE)
        {
            ULONG64 Fragment = *s64;
            *p64 = Fragment;

            PWCHAR Verify = (PWCHAR)&Fragment;
            if (!Verify[0] || !Verify[1] || !Verify[2] || !Verify[3])
                break;

            p64++;
            s64++;
        }

        p = (PWCHAR)p64;
        String2 = (PWCHAR)s64;
    }

    while ((*p++ = *String2++) != L'\0');

    return String1;
}

PWCHAR StringCopyW5(PWCHAR String1, LPCWSTR String2)
{
    for (SIZE_T i = 0; ; i++)
    {
        String1[i] = String2[i];
        if (String2[i] == L'\0')
            break;
    }

    return String1;
}

Last updated