[Vm-dev] [commit] r2152 - Add Eliot's clipboard handling fix.

Chris Muller asqueaker at gmail.com
Thu Mar 11 03:39:41 UTC 2010


OMG, is the clipboard going to work in Linux now?

On Wed, Mar 10, 2010 at 1:22 PM,  <commits at squeakvm.org> wrote:
>
> Author: andreas
> Date: 2010-03-10 11:22:45 -0800 (Wed, 10 Mar 2010)
> New Revision: 2152
>
> Modified:
>   trunk/platforms/win32/vm/sqWin32Window.c
> Log:
> Add Eliot's clipboard handling fix.
>
> Modified: trunk/platforms/win32/vm/sqWin32Window.c
> ===================================================================
> --- trunk/platforms/win32/vm/sqWin32Window.c    2010-02-24 13:25:07 UTC (rev 2151)
> +++ trunk/platforms/win32/vm/sqWin32Window.c    2010-03-10 19:22:45 UTC (rev 2152)
> @@ -2353,7 +2353,6 @@
>  int clipboardSize(void) {
>   HANDLE h;
>   WCHAR *src;
> -  unsigned char *tmp;
>   int i, count, bytesNeeded;
>
>   /* Do we have text in the clipboard? */
> @@ -2370,18 +2369,20 @@
>   /* How many bytes do we need to store those unicode chars in UTF8 format? */
>   bytesNeeded = WideCharToMultiByte(CP_UTF8, 0, src, -1,
>                                    NULL, 0, NULL, NULL );
> -  tmp = malloc(bytesNeeded+1);
> +  if (bytesNeeded > 0) {
> +    unsigned char *tmp = malloc(bytesNeeded+1);
>
> -  /* Convert Unicode text to UTF8. */
> -  WideCharToMultiByte(CP_UTF8, 0, src, -1, tmp, bytesNeeded , NULL, NULL);
> +    /* Convert Unicode text to UTF8. */
> +    WideCharToMultiByte(CP_UTF8, 0, src, -1, tmp, bytesNeeded , NULL, NULL);
>
> -  /* Count CrLfs for which we remove the extra Lf */
> -  count = bytesNeeded; /* ex. terminating zero */
> -  for(i=0; i<count; i++) {
> -    if((tmp[i] == 13) && (tmp[i+1] == 10)) bytesNeeded--;
> +    /* Count CrLfs for which we remove the extra Lf */
> +    count = bytesNeeded; /* ex. terminating zero */
> +    for(i=0; i<count; i++) {
> +      if((tmp[i] == 13) && (tmp[i+1] == 10)) bytesNeeded--;
> +    }
> +    bytesNeeded--; /* discount terminating zero */
> +    free(tmp); /* no longer needed */
>   }
> -  bytesNeeded--; /* discount terminating zero */
> -  free(tmp); /* no longer needed */
>
>   GlobalUnlock(h);
>   CloseClipboard();
>
>


More information about the Vm-dev mailing list