On Wed, Jan 11, 2012 at 11:37 AM, Enlightenment SVN
<no-re...@enlightenment.org> wrote:
> Log:
> eina: massiv fix for Eina_Value.
>
>  Should be more portable and work with C++.
>
>  NOTE: I still see an aliasing break in eina_value_pset, but wasn't
>  able to figure how to solve it.
>
>
> Author:       cedric
> Date:         2012-01-11 02:37:13 -0800 (Wed, 11 Jan 2012)
> New Revision: 67065
> Trac:         http://trac.enlightenment.org/e/changeset/67065
>
> Modified:
>  trunk/eina/src/include/eina_inline_value.x 
> trunk/eina/src/include/eina_value.h trunk/eina/src/lib/eina_value.c
>
> Modified: trunk/eina/src/include/eina_inline_value.x
> ===================================================================
> --- trunk/eina/src/include/eina_inline_value.x  2012-01-11 10:35:52 UTC (rev 
> 67064)
> +++ trunk/eina/src/include/eina_inline_value.x  2012-01-11 10:37:13 UTC (rev 
> 67065)
> @@ -20,6 +20,8 @@
>  #define EINA_INLINE_VALUE_X_
>
>  #include <string.h>
> +#include <alloca.h>

aaaaaaaaarrrrrrrrggggggg : not portable at all !!!!!!!

Vincent

> +
>  #include "eina_stringshare.h"
>
>  /* NOTE: most of value is implemented here for performance reasons */
> @@ -127,7 +129,7 @@
>      {
>         if (type == EINA_VALUE_TYPE_STRINGSHARE)
>           {
> -             if (value->value.ptr) eina_stringshare_del(value->value.ptr);
> +             if (value->value.ptr) eina_stringshare_del((const char*) 
> value->value.ptr);
>           }
>         else if (type == EINA_VALUE_TYPE_STRING)
>           {
> @@ -161,7 +163,7 @@
>  #ifndef EINA_VALUE_NO_OPTIMIZE
>    if (type == EINA_VALUE_TYPE_UCHAR)
>      {
> -        unsigned char *ta = pa, *tb = pb;
> +        unsigned char *ta = (unsigned char *) pa, *tb = (unsigned char *) pb;
>         if (*ta < *tb)
>           return -1;
>         else if (*ta > *tb)
> @@ -170,7 +172,7 @@
>      }
>    else if (type == EINA_VALUE_TYPE_USHORT)
>      {
> -        unsigned short *ta = pa, *tb = pb;
> +        unsigned short *ta = (unsigned short *) pa, *tb = (unsigned short *) 
> pb;
>         if (*ta < *tb)
>           return -1;
>         else if (*ta > *tb)
> @@ -179,7 +181,7 @@
>      }
>    else if (type == EINA_VALUE_TYPE_UINT)
>      {
> -        unsigned int *ta = pa, *tb = pb;
> +        unsigned int *ta = (unsigned int *) pa, *tb = (unsigned int *) pb;
>         if (*ta < *tb)
>           return -1;
>         else if (*ta > *tb)
> @@ -188,7 +190,7 @@
>      }
>    else if (type == EINA_VALUE_TYPE_ULONG)
>      {
> -        unsigned long *ta = pa, *tb = pb;
> +        unsigned long *ta = (unsigned long *) pa, *tb = (unsigned long *) pb;
>         if (*ta < *tb)
>           return -1;
>         else if (*ta > *tb)
> @@ -197,7 +199,7 @@
>      }
>    else if (type == EINA_VALUE_TYPE_UINT64)
>      {
> -        uint64_t *ta = pa, *tb = pb;
> +        uint64_t *ta = (uint64_t *) pa, *tb = (uint64_t *) pb;
>         if (*ta < *tb)
>           return -1;
>         else if (*ta > *tb)
> @@ -206,7 +208,7 @@
>      }
>    else if (type == EINA_VALUE_TYPE_CHAR)
>      {
> -        char *ta = pa, *tb = pb;
> +        char *ta = (char *) pa, *tb = (char *) pb;
>         if (*ta < *tb)
>           return -1;
>         else if (*ta > *tb)
> @@ -215,7 +217,7 @@
>      }
>    else if (type == EINA_VALUE_TYPE_SHORT)
>      {
> -        short *ta = pa, *tb = pb;
> +        short *ta = (short *) pa, *tb = (short *) pb;
>         if (*ta < *tb)
>           return -1;
>         else if (*ta > *tb)
> @@ -224,7 +226,7 @@
>      }
>    else if (type == EINA_VALUE_TYPE_INT)
>      {
> -        int *ta = pa, *tb = pb;
> +        int *ta = (int *) pa, *tb = (int *) pb;
>         if (*ta < *tb)
>           return -1;
>         else if (*ta > *tb)
> @@ -233,7 +235,7 @@
>      }
>    else if (type == EINA_VALUE_TYPE_LONG)
>      {
> -        long *ta = pa, *tb = pb;
> +        long *ta = (long *) pa, *tb = (long *) pb;
>         if (*ta < *tb)
>           return -1;
>         else if (*ta > *tb)
> @@ -242,7 +244,7 @@
>      }
>    else if (type == EINA_VALUE_TYPE_INT64)
>      {
> -        int64_t *ta = pa, *tb = pb;
> +        int64_t *ta = (int64_t *) pa, *tb = (int64_t *) pb;
>         if (*ta < *tb)
>           return -1;
>         else if (*ta > *tb)
> @@ -251,7 +253,7 @@
>      }
>    else if (type == EINA_VALUE_TYPE_FLOAT)
>      {
> -        float *ta = pa, *tb = pb;
> +        float *ta = (float *) pa, *tb = (float *) pb;
>         if (*ta < *tb)
>           return -1;
>         else if (*ta > *tb)
> @@ -260,7 +262,7 @@
>      }
>    else if (type == EINA_VALUE_TYPE_DOUBLE)
>      {
> -        double *ta = pa, *tb = pb;
> +        double *ta = (double *) pa, *tb = (double *) pb;
>         if (*ta < *tb)
>           return -1;
>         else if (*ta > *tb)
> @@ -322,84 +324,84 @@
>  #ifndef EINA_VALUE_NO_OPTIMIZE
>    if (type == EINA_VALUE_TYPE_UCHAR)
>      {
> -        unsigned char *tmem = mem;
> +        unsigned char *tmem = (unsigned char *) mem;
>         *tmem = va_arg(args, unsigned int); /* promoted by va_arg */
>         return EINA_TRUE;
>      }
>    else if (type == EINA_VALUE_TYPE_USHORT)
>      {
> -        unsigned short *tmem = mem;
> +        unsigned short *tmem = (unsigned short *) mem;
>         *tmem = va_arg(args, unsigned int); /* promoted by va_arg */
>         return EINA_TRUE;
>      }
>    else if (type == EINA_VALUE_TYPE_UINT)
>      {
> -        unsigned int *tmem = mem;
> +        unsigned int *tmem = (unsigned int *) mem;
>         *tmem = va_arg(args, unsigned int);
>         return EINA_TRUE;
>      }
>    else if (type == EINA_VALUE_TYPE_ULONG)
>      {
> -        unsigned long *tmem = mem;
> +        unsigned long *tmem = (unsigned long *) mem;
>         *tmem = va_arg(args, unsigned long);
>         return EINA_TRUE;
>      }
>    else if (type == EINA_VALUE_TYPE_UINT64)
>      {
> -        uint64_t *tmem = mem;
> +        uint64_t *tmem = (uint64_t *) mem;
>         *tmem = va_arg(args, uint64_t);
>         return EINA_TRUE;
>      }
>    else if (type == EINA_VALUE_TYPE_CHAR)
>      {
> -        char *tmem = mem;
> +        char *tmem = (char *) mem;
>         *tmem = va_arg(args, int); /* promoted by va_arg */
>         return EINA_TRUE;
>      }
>    else if (type == EINA_VALUE_TYPE_SHORT)
>      {
> -        short *tmem = mem;
> +        short *tmem = (short *) mem;
>         *tmem = va_arg(args, int); /* promoted by va_arg */
>         return EINA_TRUE;
>      }
>    else if (type == EINA_VALUE_TYPE_INT)
>      {
> -        int *tmem = mem;
> +        int *tmem = (int *) mem;
>         *tmem = va_arg(args, int);
>         return EINA_TRUE;
>      }
>    else if (type == EINA_VALUE_TYPE_LONG)
>      {
> -        long *tmem = mem;
> +        long *tmem = (long *) mem;
>         *tmem = va_arg(args, long);
>         return EINA_TRUE;
>      }
>    else if (type == EINA_VALUE_TYPE_INT64)
>      {
> -        int64_t *tmem = mem;
> +        int64_t *tmem = (int64_t *) mem;
>         *tmem = va_arg(args, int64_t);
>         return EINA_TRUE;
>      }
>    else if (type == EINA_VALUE_TYPE_FLOAT)
>      {
> -        float *tmem = mem;
> +        float *tmem = (float *) mem;
>         *tmem = va_arg(args, double); /* promoted by va_arg */
>         return EINA_TRUE;
>      }
>    else if (type == EINA_VALUE_TYPE_DOUBLE)
>      {
> -        double *tmem = mem;
> +        double *tmem = (double *) mem;
>         *tmem = va_arg(args, double);
>         return EINA_TRUE;
>      }
>    else if (type == EINA_VALUE_TYPE_STRINGSHARE)
>      {
> -        const char *str = va_arg(args, const char *);
> +        const char *str = (const char *) va_arg(args, const char *);
>         return eina_stringshare_replace((const char **)&value->value.ptr, 
> str);
>      }
>    else if (type == EINA_VALUE_TYPE_STRING)
>      {
> -        const char *str = va_arg(args, const char *);
> +        const char *str = (const char *) va_arg(args, const char *);
>         free(value->value.ptr);
>         if (!str)
>           value->value.ptr = NULL;
> @@ -460,19 +462,23 @@
>      {
>         if (type == EINA_VALUE_TYPE_STRINGSHARE)
>           {
> -             const char * const *str = ptr;
> +             const char * const *pstr = (const char * const *) ptr;
> +             const char *str = *pstr;
> +
>              return eina_stringshare_replace((const char **)&value->value.ptr,
> -                                             *str);
> +                                             str);
>           }
>         else if (type == EINA_VALUE_TYPE_STRING)
>           {
> -             const char * const *str = ptr;
> +             const char * const * pstr = (const char * const *) ptr;
> +             const char *str = *pstr;
> +
>              free(value->value.ptr);
> -             if (!*str)
> +             if (!str)
>                value->value.ptr = NULL;
>              else
>                {
> -                  value->value.ptr = strdup(*str);
> +                  value->value.ptr = strdup(str);
>                   if (!value->value.ptr)
>                     {
>                        eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
> @@ -526,7 +532,7 @@
>  static inline Eina_Bool
>  eina_value_array_setup(Eina_Value *value, const Eina_Value_Type *subtype, 
> unsigned int step)
>  {
> -   Eina_Value_Array desc = {subtype, step, NULL};
> +   Eina_Value_Array desc = { subtype, step, NULL };
>    if (!eina_value_setup(value, EINA_VALUE_TYPE_ARRAY))
>      return EINA_FALSE;
>    if (!eina_value_pset(value, &desc))
>
> Modified: trunk/eina/src/include/eina_value.h
> ===================================================================
> --- trunk/eina/src/include/eina_value.h 2012-01-11 10:35:52 UTC (rev 67064)
> +++ trunk/eina/src/include/eina_value.h 2012-01-11 10:37:13 UTC (rev 67065)
> @@ -681,7 +681,7 @@
>    const Eina_Value_Type *subtype; /**< how to allocate and access items */
>    unsigned int step; /**< how to grow the members array */
>    Eina_Inarray *array; /**< the array that holds data, members are of 
> subtype->value_size bytes. */
> - };
> +};
>
>  /**
>  * @brief Create generic value storage of type array.
>
> Modified: trunk/eina/src/lib/eina_value.c
> ===================================================================
> --- trunk/eina/src/lib/eina_value.c     2012-01-11 10:35:52 UTC (rev 67064)
> +++ trunk/eina/src/lib/eina_value.c     2012-01-11 10:37:13 UTC (rev 67065)
> @@ -28,10 +28,9 @@
>  # include "config.h"
>  #endif
>
> -/* _GNU_SOURCE: asprintf() */
> -#ifndef _GNU_SOURCE
> -#define _GNU_SOURCE
> -#endif
> +#include <stdio.h> /* asprintf() */
> +#include <inttypes.h> /* PRId64 and PRIu64 */
> +
>  #include "eina_config.h"
>  #include "eina_private.h"
>  #include "eina_error.h"
> @@ -42,9 +41,6 @@
>  #include "eina_safety_checks.h"
>  #include "eina_value.h"
>
> -#include <stdio.h> /* asprintf() */
> -#include <inttypes.h> /* PRId64 and PRIu64 */
> -
>  /*============================================================================*
>  *                                  Local                                     
> *
>  *============================================================================*/
> @@ -981,7 +977,7 @@
>  static Eina_Bool
>  _eina_value_type_char_convert_to(const Eina_Value_Type *type __UNUSED__, 
> const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
>  {
> -   const char v = *(const char *)type_mem;
> +   const signed char v = *(const signed char *)type_mem;
>
>    eina_error_set(0);
>
> @@ -1518,7 +1514,7 @@
>         unsigned char other_mem = v;
>         if (EINA_UNLIKELY(v < 0))
>           return EINA_FALSE;
> -        if (EINA_UNLIKELY(v > eina_value_uchar_max))
> +        if (EINA_UNLIKELY((unsigned long) v > eina_value_uchar_max))
>             return EINA_FALSE;
>         return eina_value_type_pset(convert, convert_mem, &other_mem);
>      }
> @@ -1527,7 +1523,7 @@
>         unsigned short other_mem = v;
>         if (EINA_UNLIKELY(v < 0))
>           return EINA_FALSE;
> -        if (EINA_UNLIKELY(v > eina_value_ushort_max))
> +        if (EINA_UNLIKELY((unsigned long) v > eina_value_ushort_max))
>           return EINA_FALSE;
>         return eina_value_type_pset(convert, convert_mem, &other_mem);
>      }
> @@ -1536,7 +1532,7 @@
>         unsigned int other_mem = v;
>         if (EINA_UNLIKELY(v < 0))
>           return EINA_FALSE;
> -        if (EINA_UNLIKELY(v > eina_value_uint_max))
> +        if (EINA_UNLIKELY((unsigned long) v > eina_value_uint_max))
>           return EINA_FALSE;
>         return eina_value_type_pset(convert, convert_mem, &other_mem);
>      }
>
>
> ------------------------------------------------------------------------------
> Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
> infrastructure or vast IT resources to deliver seamless, secure access to
> virtual desktops. With this all-in-one solution, easily deploy virtual
> desktops for less than the cost of PCs and save 60% on VDI infrastructure
> costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
> _______________________________________________
> enlightenment-svn mailing list
> enlightenment-...@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-svn

------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual 
desktops for less than the cost of PCs and save 60% on VDI infrastructure 
costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to