Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
1.3 KiB

  1. /*****************************************************************/
  2. /** Microsoft Windows for Workgroups **/
  3. /** Copyright (C) Microsoft Corp., 1991-1992 **/
  4. /*****************************************************************/
  5. /* BUFGLOB.CPP -- Implementation of GLOBAL_BUFFER class.
  6. *
  7. * History:
  8. * 03/24/93 gregj Created
  9. */
  10. #include "npcommon.h"
  11. #include "buffer.h"
  12. BOOL LOCAL_BUFFER::Alloc( UINT cbBuffer )
  13. {
  14. _hMem = ::LocalAlloc( LMEM_MOVEABLE, cbBuffer );
  15. if (_hMem == NULL) {
  16. _npBuffer = NULL;
  17. _cb = 0;
  18. return FALSE;
  19. }
  20. _npBuffer = ::LocalLock( _hMem );
  21. _cb = cbBuffer;
  22. return TRUE;
  23. }
  24. BOOL LOCAL_BUFFER::Realloc( UINT cbNew )
  25. {
  26. if (_hMem == NULL)
  27. return FALSE;
  28. ::LocalUnlock( _hMem );
  29. HLOCAL hNew = ::LocalReAlloc( _hMem, cbNew, LMEM_MOVEABLE );
  30. if (hNew == NULL) {
  31. ::LocalLock( _hMem );
  32. return FALSE;
  33. }
  34. _hMem = hNew;
  35. _npBuffer = ::LocalLock( _hMem );
  36. _cb = cbNew;
  37. return TRUE;
  38. }
  39. LOCAL_BUFFER::LOCAL_BUFFER( UINT cbInitial /* =0 */ )
  40. : BUFFER_BASE(),
  41. _hMem( NULL ),
  42. _npBuffer( NULL )
  43. {
  44. if (cbInitial)
  45. Alloc( cbInitial );
  46. }
  47. LOCAL_BUFFER::~LOCAL_BUFFER()
  48. {
  49. if (_hMem != NULL) {
  50. ::LocalUnlock( _hMem );
  51. ::LocalFree( _hMem );
  52. _hMem = NULL;
  53. _npBuffer = NULL;
  54. }
  55. }