Changeset 1792 for trunk/src/kernel32/message.cpp
- Timestamp:
- Nov 21, 1999, 2:59:36 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/message.cpp
r1242 r1792 1 /* $Id: message.cpp,v 1. 7 1999-10-10 09:00:58 sandervlExp $ */1 /* $Id: message.cpp,v 1.8 1999-11-21 13:59:36 achimha Exp $ */ 2 2 3 3 /* … … 7 7 * 8 8 * Original WINE code (loader\resource.c) 9 * WINE level: 991031 9 10 * 10 11 * Resources … … 25 26 #include "heapstring.h" 26 27 28 typedef VOID (*WVSPRINTFAPROC)(LPSTR,LPCSTR,va_list); 29 WVSPRINTFAPROC wvsprintfAProc = NULL; 30 31 BOOL LoadwvsprintfA(VOID) 32 { 33 //CB: load wvsprintfA dynamic to avoid problems with crosslinked DLL's 34 if (!wvsprintfAProc) 35 { 36 HMODULE hUser32 = LoadLibraryA("USER32.DLL"); 37 38 wvsprintfAProc = (WVSPRINTFAPROC)GetProcAddress(hUser32,"wvsprintfA"); 39 FreeLibrary(hUser32); 40 } 41 42 return wvsprintfAProc != NULL; 43 } 27 44 28 45 //****************************************************************************** … … 47 64 48 65 /*FIXME: I am not sure about the '1' ... But I've only seen those entries*/ 49 hrsrc = FindResource A(instance,(LPCSTR)1,(LPCSTR)RT_MESSAGELISTA);66 hrsrc = FindResourceW(instance,(LPWSTR)1,RT_MESSAGELISTW); 50 67 if (!hrsrc) return 0; 51 68 hmem = LoadResource(instance, hrsrc); … … 126 143 f; 127 144 DWORD width = dwFlags & FORMAT_MESSAGE_MAX_WIDTH_MASK; 128 DWORD nolinefeed = 0;145 BOOL eos = FALSE; 129 146 130 147 dprintf(("KERNEL32: FormatMessageA(%08xh,%08xh,%08xh,%08xh,%08xh,%08xh,%08xh)\n", … … 179 196 f=from; 180 197 181 while (*f && ! nolinefeed)198 while (*f && !eos) 182 199 { 183 200 if (*f=='%') … … 250 267 argliststart=(*(DWORD**)args)+insertnr-1; 251 268 252 if (fmtstr[strlen(fmtstr)-1]=='s' )269 if (fmtstr[strlen(fmtstr)-1]=='s' && argliststart[0]) 253 270 sprintfbuf = (char*)HeapAlloc(GetProcessHeap(),0,strlen((LPSTR)argliststart[0])+1); 254 271 else … … 256 273 257 274 /* CMF - This makes a BIG assumption about va_list */ 258 O32_wvsprintf(sprintfbuf, fmtstr, (va_list)argliststart);275 if (LoadwvsprintfA()) wvsprintfAProc(sprintfbuf,fmtstr,(va_list)argliststart); 259 276 x=sprintfbuf; 260 277 while (*x) … … 280 297 281 298 case 'n': 282 /* FIXME: perhaps add \r too? */299 ADD_TO_T('\r'); 283 300 ADD_TO_T('\n'); 284 301 f++; … … 286 303 287 304 case '0': 288 nolinefeed=1;305 eos = TRUE; 289 306 f++; 290 307 break; … … 293 310 break; 294 311 } 295 } 296 else 297 { 298 ADD_TO_T(*f++) 312 } else 313 { /* '\n' or '\r' gets mapped to "\r\n" */ 314 if(*f == '\n' || *f == '\r') 315 { 316 ADD_TO_T('\r'); 317 ADD_TO_T('\n'); 318 if(*f++ == '\r' && *f == '\n') 319 f++; 320 } else 321 { 322 ADD_TO_T(*f++); 323 } 299 324 } 300 325 } 301 326 *t='\0'; 302 }303 304 if (!nolinefeed)305 {306 /* add linefeed */307 if(t==target || t[-1]!='\n')308 ADD_TO_T('\n'); /* FIXME: perhaps add \r too? */309 327 } 310 328 … … 353 371 LPSTR from,f; 354 372 DWORD width = dwFlags & FORMAT_MESSAGE_MAX_WIDTH_MASK; 355 DWORD nolinefeed = 0;373 BOOL eos = FALSE; 356 374 357 375 dprintf(("KERNEL32: FormatMessageW(%08xh,%08xh,%08xh,%08xh,%08xh,%08xh,%08xh)\n", … … 405 423 if (from) { 406 424 f=from; 407 while (*f && ! nolinefeed) {425 while (*f && !eos) { 408 426 if (*f=='%') { 409 427 int insertnr; … … 456 474 argliststart=(*(DWORD**)args)+insertnr-1; 457 475 458 if (fmtstr[strlen(fmtstr)-1]=='s' ) {476 if (fmtstr[strlen(fmtstr)-1]=='s' && argliststart[0]) { 459 477 DWORD xarr[3]; 460 478 … … 471 489 472 490 /* CMF - This makes a BIG assumption about va_list */ 473 O32_wvsprintf(sprintfbuf, fmtstr, (va_list)argliststart);491 if (LoadwvsprintfA()) wvsprintfAProc(sprintfbuf,fmtstr,(va_list)argliststart); 474 492 } 475 493 x=sprintfbuf; … … 481 499 break; 482 500 case 'n': 483 /* FIXME: perhaps add \r too? */501 ADD_TO_T('\r'); 484 502 ADD_TO_T('\n'); 485 503 f++; 486 504 break; 487 505 case '0': 488 nolinefeed=1;506 eos = TRUE; 489 507 f++; 490 508 break; … … 492 510 break; 493 511 494 } 495 } else { 496 ADD_TO_T(*f++) 497 } 512 } 513 } else 514 { /* '\n' or '\r' gets mapped to "\r\n" */ 515 if(*f == '\n' || *f == '\r') 516 { 517 ADD_TO_T('\r'); 518 ADD_TO_T('\n'); 519 if(*f++ == '\r' && *f == '\n') 520 f++; 521 } else 522 { 523 ADD_TO_T(*f++); 524 } 525 } 498 526 } 499 527 *t='\0'; 500 }501 if (!nolinefeed) {502 /* add linefeed */503 if(t==target || t[-1]!='\n')504 ADD_TO_T('\n'); /* FIXME: perhaps add \r too? */505 528 } 506 529 talloced = strlen(target)+1; … … 521 544 #undef ADD_TO_T 522 545 546
Note:
See TracChangeset
for help on using the changeset viewer.