Ignore:
Timestamp:
Nov 4, 1999, 7:36:15 PM (26 years ago)
Author:
phaller
Message:

Fix: wvsprintfAW fixed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/user32.cpp

    r1516 r1593  
    1 /* $Id: user32.cpp,v 1.49 1999-10-30 10:55:15 sandervl Exp $ */
     1/* $Id: user32.cpp,v 1.50 1999-11-04 18:35:42 phaller Exp $ */
    22
    33/*
     
    336336}
    337337
    338 /* String Manipulation Functions */
    339 
    340 int __cdecl wsprintfA(char *lpOut, LPCSTR lpFmt, ...)
    341 {
    342  int     rc;
    343  va_list argptr;
    344 
    345 #ifdef DEBUG
    346   WriteLog("USER32:  wsprintfA\n");
    347   WriteLog("USER32:  %s\n", lpFmt);
    348 #endif
    349   va_start(argptr, lpFmt);
    350   rc = O32_wvsprintf(lpOut, (char *)lpFmt, argptr);
    351   va_end(argptr);
    352 #ifdef DEBUG
    353   WriteLog("USER32:  %s\n", lpOut);
    354 #endif
    355   return(rc);
    356 }
    357 //******************************************************************************
    358 //******************************************************************************
    359 int __cdecl wsprintfW(LPWSTR lpOut, LPCWSTR lpFmt, ...)
    360 {
    361   int     rc;
    362   char   *lpFmtA;
    363   char    szOut[512];
    364   va_list argptr;
    365 
    366   dprintf(("USER32: wsprintfW(%08xh,%08xh).\n",
    367            lpOut,
    368            lpFmt));
    369 
    370   lpFmtA  = UnicodeToAsciiString((LPWSTR)lpFmt);
    371 
    372   /* @@@PH 98/07/13 transform "%s" to "%ls" does the unicode magic */
    373   {
    374     PCHAR   pszTemp;
    375     PCHAR   pszTemp1;
    376     ULONG   ulStrings;
    377     ULONG   ulIndex;                             /* temporary string counter */
    378 
    379     for (ulStrings = 0,                  /* determine number of placeholders */
    380          pszTemp   = lpFmtA;
    381 
    382          (pszTemp != NULL) &&
    383          (*pszTemp != 0);
    384 
    385          ulStrings++)
    386     {
    387       pszTemp = strstr(pszTemp,
    388                        "%s");
    389       if (pszTemp != NULL)                              /* skip 2 characters */
    390       {
    391         pszTemp++;
    392         pszTemp++;
    393       }
    394       else
    395         break;                                     /* leave loop immediately */
    396     }
    397 
    398     if (ulStrings != 0)                         /* transformation required ? */
    399     {
    400                                                      /* now reallocate lpFmt */
    401       ulStrings += strlen(lpFmtA);           /* calculate total string length */
    402       pszTemp   = lpFmtA;                              /* save string pointer */
    403       pszTemp1  = lpFmtA;                              /* save string pointer */
    404 
    405              /* @@@PH allocation has to be compatible to FreeAsciiString !!! */
    406       lpFmtA     = (char *)malloc(ulStrings + 1);
    407       if (lpFmtA == NULL)                          /* check proper allocation */
    408         return (0);                                 /* raise error condition */
    409 
    410       for (ulIndex = 0;
    411            ulIndex <= ulStrings;
    412            ulIndex++,
    413            pszTemp++)
    414       {
    415         if ((pszTemp[0] == '%') &&
    416             (pszTemp[1] == 's') )
    417         {
    418           /* replace %s by %ls */
    419           lpFmtA[ulIndex++] = '%';
    420           lpFmtA[ulIndex  ] = 'l';
    421           lpFmtA[ulIndex+1] = 's';
    422         }
    423         else
    424           lpFmtA[ulIndex] = *pszTemp;         /* just copy over the character */
    425       }
    426 
    427       lpFmtA[ulStrings] = 0;                            /* string termination */
    428 
    429       FreeAsciiString(pszTemp1);          /* the original string is obsolete */
    430     }
    431   }
    432 
    433   dprintf(("USER32:  wsprintfW (%s).\n",
    434            lpFmt));
    435 
    436   va_start(argptr,
    437            lpFmt);
    438 
    439   rc = O32_wvsprintf(szOut,
    440                  lpFmtA,
    441                  argptr);
    442 
    443   AsciiToUnicode(szOut,
    444                  lpOut);
    445 
    446   FreeAsciiString(lpFmtA);
    447   return(rc);
    448 }
    449 //******************************************************************************
    450 //******************************************************************************
    451 int WIN32API wvsprintfA( LPSTR lpOutput, LPCSTR lpFormat, va_list arglist)
    452 {
    453 #ifdef DEBUG
    454     WriteLog("USER32:  wvsprintfA\n");
    455 #endif
    456     return O32_wvsprintf(lpOutput,lpFormat,(LPCVOID*)arglist);
    457 }
    458 //******************************************************************************
    459 //******************************************************************************
    460 int WIN32API wvsprintfW(LPWSTR lpOutput, LPCWSTR lpFormat, va_list arglist)
    461 {
    462  int     rc;
    463  char    szOut[256];
    464  char   *lpFmtA;
    465 
    466   lpFmtA  = UnicodeToAsciiString((LPWSTR)lpFormat);
    467 #ifdef DEBUG
    468   WriteLog("USER32:  wvsprintfW, DOES NOT HANDLE UNICODE STRINGS!\n");
    469   WriteLog("USER32:  %s\n", lpFormat);
    470 #endif
    471   rc = O32_wvsprintf(szOut, lpFmtA, (LPCVOID)arglist);
    472 
    473   AsciiToUnicode(szOut, lpOutput);
    474 #ifdef DEBUG
    475   WriteLog("USER32:  %s\n", lpOutput);
    476 #endif
    477   FreeAsciiString(lpFmtA);
    478   return(rc);
    479 }
    480 
    481338/* Cursor Functions */
    482339
Note: See TracChangeset for help on using the changeset viewer.