xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ipf64.cpp

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     2 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
     3  *
     4  * This Source Code Form is subject to the terms of the Mozilla Public
     5  * License, v. 2.0. If a copy of the MPL was not distributed with this
     6  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     8 #include "xptcprivate.h"
    10 #include <stdint.h>
    12 // "This code is for IA64 only"
    15 /* invoke_copy_to_stack() will copy from variant array 's' to
    16  * the stack argument area 'mloc', the integer register area 'iloc', and
    17  * the float register area 'floc'.
    18  *
    19  */
    20 extern "C" void
    21 invoke_copy_to_stack(uint64_t* mloc, uint64_t* iloc, uint64_t* floc,
    22   const uint32_t paramCount, nsXPTCVariant* s)
    23 {
    24   uint64_t* dest = mloc;
    25   uint32_t len = paramCount;
    26   nsXPTCVariant* source = s;
    28   uint32_t indx;
    29   uint32_t endlen;
    30   endlen = (len > 7) ? 7 : len;
    31   /* handle the memory arguments */
    32   for (indx = 7; indx < len; ++indx)
    33   {
    34     if (source[indx].IsPtrData())
    35     {
    36       /* 64 bit pointer mode */
    37       *((void**) dest) = source[indx].ptr;
    38     }
    39     else
    40     switch (source[indx].type)
    41     {
    42     case nsXPTType::T_I8    : *(dest) = source[indx].val.i8;  break;
    43     case nsXPTType::T_I16   : *(dest) = source[indx].val.i16; break;
    44     case nsXPTType::T_I32   : *(dest) = source[indx].val.i32; break;
    45     case nsXPTType::T_I64   : *(dest) = source[indx].val.i64; break;
    46     case nsXPTType::T_U8    : *(dest) = source[indx].val.u8;  break;
    47     case nsXPTType::T_U16   : *(dest) = source[indx].val.u16; break;
    48     case nsXPTType::T_U32   : *(dest) = source[indx].val.u32; break;
    49     case nsXPTType::T_U64   : *(dest) = source[indx].val.u64; break;
    50     case nsXPTType::T_FLOAT : *(dest) = source[indx].val.u32; break;
    51     case nsXPTType::T_DOUBLE: *(dest) = source[indx].val.u64; break;
    52     case nsXPTType::T_BOOL  : *(dest) = source[indx].val.b; break;
    53     case nsXPTType::T_CHAR  : *(dest) = source[indx].val.c; break;
    54     case nsXPTType::T_WCHAR : *(dest) = source[indx].val.wc; break;
    55     default:
    56     // all the others are plain pointer types
    57       /* 64 bit pointer mode */
    58       *((void**) dest) = source[indx].val.p;
    59     }
    60     ++dest;
    61   }
    62   /* process register arguments */
    63   dest = iloc;
    64   for (indx = 0; indx < endlen; ++indx)
    65   {
    66     if (source[indx].IsPtrData())
    67     {
    68       /* 64 bit pointer mode */
    69       *((void**) dest) = source[indx].ptr;
    70     }
    71     else
    72     switch (source[indx].type)
    73     {
    74     case nsXPTType::T_I8    : *(dest) = source[indx].val.i8; break;
    75     case nsXPTType::T_I16   : *(dest) = source[indx].val.i16; break;
    76     case nsXPTType::T_I32   : *(dest) = source[indx].val.i32; break;
    77     case nsXPTType::T_I64   : *(dest) = source[indx].val.i64; break;
    78     case nsXPTType::T_U8    : *(dest) = source[indx].val.u8; break;
    79     case nsXPTType::T_U16   : *(dest) = source[indx].val.u16; break;
    80     case nsXPTType::T_U32   : *(dest) = source[indx].val.u32; break;
    81     case nsXPTType::T_U64   : *(dest) = source[indx].val.u64; break;
    82     case nsXPTType::T_FLOAT :
    83       *((double*) (floc++)) = (double) source[indx].val.f;
    84       break;
    85     case nsXPTType::T_DOUBLE:
    86       *((double*) (floc++)) = source[indx].val.d;
    87       break;
    88     case nsXPTType::T_BOOL  : *(dest) = source[indx].val.b; break;
    89     case nsXPTType::T_CHAR  : *(dest) = source[indx].val.c; break;
    90     case nsXPTType::T_WCHAR : *(dest) = source[indx].val.wc; break;
    91     default:
    92     // all the others are plain pointer types
    93       /* 64 bit pointer mode */
    94       *((void**) dest) = source[indx].val.p;
    95     }
    96     ++dest;
    97   }
    99 }

mercurial