[dlls/dmloader/container.c] Strncpy elimination.

Peter Berg Larsen pebl at math.ku.dk
Fri Apr 15 16:54:35 CDT 2005


I have no idea of whether pwszAlias should be '\0' if it is truncated, or
could the memcpy be dropped if in this case?

Changelog:
        Strncpy elimination.


Index: dlls/dmloader/container.c
===================================================================
RCS file: /home/wine/wine/dlls/dmloader/container.c,v
retrieving revision 1.12
diff -u -r1.12 container.c
--- dlls/dmloader/container.c   9 Jan 2005 16:42:53 -0000       1.12
+++ dlls/dmloader/container.c   15 Apr 2005 20:13:56 -0000
@@ -77,7 +77,7 @@
        ICOM_THIS_MULTI(IDirectMusicContainerImpl, ContainerVtbl, iface);
        struct list *pEntry;
        LPWINE_CONTAINER_ENTRY pContainedObject;
-       DWORD dwCount = 0;
+       DWORD dwLength, dwCount = 0;

        TRACE("(%p, %s, %ld, %p, %p)\n", This, debugstr_dmguid(rguidClass), dwIndex, pDesc, pwszAlias);

@@ -107,12 +107,15 @@
        LIST_FOR_EACH (pEntry, This->pContainedObjects) {
                pContainedObject = LIST_ENTRY (pEntry, WINE_CONTAINER_ENTRY, entry);

-               if (IsEqualGUID (rguidClass, &GUID_DirectMusicAllTypes) || IsEqualGUID (rguidClass, &pContainedObject->Desc.guidClass)) {
+               if (IsEqualGUID (rguidClass, &GUID_DirectMusicAllTypes) ||
+                    IsEqualGUID (rguidClass, &pContainedObject->Desc.guidClass)) {
                        if (dwCount == dwIndex) {
                                HRESULT result = S_OK;
                                if (pwszAlias) {
-                                       strncpyW (pwszAlias, pContainedObject->wszAlias, DMUS_MAX_FILENAME);
-                                       if (strlenW (pContainedObject->wszAlias) > DMUS_MAX_FILENAME)
+                                       dwLength = strlenW (pContainedObject->wszAlias);
+                                       memcpy (pwszAlias, pContainedObject->wszAlias,
+                                                min(dwLength+1,DMUS_MAX_FILENAME) * sizeof(WCHAR));
+                                       if (dwLength > DMUS_MAX_FILENAME)
                                                result = DMUS_S_STRING_TRUNCATED;
                                }
                                if (pDesc)
@@ -199,15 +202,15 @@
                dwNewFlags |= DMUS_OBJ_OBJECT;
        }
        if (pDesc->dwValidData & DMUS_OBJ_NAME) {
-               strncpyW (This->Desc.wszName, pDesc->wszName, DMUS_MAX_NAME);
+               lstrcpynW (This->Desc.wszName, pDesc->wszName, DMUS_MAX_NAME);
                dwNewFlags |= DMUS_OBJ_NAME;
        }
        if (pDesc->dwValidData & DMUS_OBJ_CATEGORY) {
-               strncpyW (This->Desc.wszCategory, pDesc->wszCategory, DMUS_MAX_CATEGORY);
+               lstrcpynW (This->Desc.wszCategory, pDesc->wszCategory, DMUS_MAX_CATEGORY);
                dwNewFlags |= DMUS_OBJ_CATEGORY;
        }
        if (pDesc->dwValidData & (DMUS_OBJ_FILENAME | DMUS_OBJ_FULLPATH)) {
-               strncpyW (This->Desc.wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME);
+               lstrcpynW (This->Desc.wszFileName, pDesc->wszFileName, DMUS_MAX_FILENAME);
                dwNewFlags |= (pDesc->dwValidData & (DMUS_OBJ_FILENAME | DMUS_OBJ_FULLPATH));
        }
        if (pDesc->dwValidData & DMUS_OBJ_VERSION) {






More information about the wine-patches mailing list