variant.c

Go to the documentation of this file.
00001 /*
00002  EasyDbus: DBUS Binding library. 
00003  Copyright (C) 2007  Daniele Rondina aka ge@@ru, geaaru@gmail.com 
00004  
00005  This program is free software; you can redistribute it and/or
00006  modify it under the terms of the GNU General Public License
00007  as published by the Free Software Foundation; either version 2
00008  of the License, or (at your option) any later version.
00009 
00010  This program is distributed in the hope that it will be useful,
00011  but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  GNU General Public License for more details.
00014 
00015  You should have received a copy of the GNU General Public License
00016  along with this program; if not, write to the Free Software
00017  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
00018 
00019   Filename:  variant.c
00020  
00021   Description:  
00022  
00023   Version:  0.1
00024   Created:  06/10/07 20:17:05 CEST
00025   Revision:  none
00026  
00027   Author:   Daniele Rondina aka ge@@ru (geaaru@gmail.com) 
00028   License:  GPL 2.0
00029 */
00035 #include <stdlib.h>
00036 #include <string.h>
00037 #include <stdio.h>
00038 // easydbus includes
00039 #include "debug.h"
00040 #include "utils.h"
00041 #include "easydbus-core.h"
00042 
00050 int
00051 easydbus_variant_add_string (EasyDbus_container * container, 
00052                              char *string)
00053 {
00054    int string_length = 0;
00055 
00056    if (container == NULL || string == NULL)
00057       return -1;
00058 
00059    if (container->container_type != EASYDBUS_ELTYPE_VARIANT)
00060       return -1;
00061 
00062    if (container->nel)
00063       return -1;
00064    string_length = strlen (string) + 1;
00065    container->p_data = malloc (string_length);
00066    if (container->p_data == NULL)
00067       return -1;
00068 
00069    EASYDBUS_MEMCOPY (container->p_data, string, string_length);
00070 
00071    container->nel = 1;
00072    container->elem_type = EASYDBUS_ELTYPE_STRING;
00073    return 0;
00074 }
00075 
00083 int
00084 easydbus_variant_add_obj_path (EasyDbus_container * container, 
00085                                char *string) 
00086 {
00087    int string_length = 0;
00088 
00089    if (container == NULL || string == NULL)
00090       return -1;
00091 
00092    if (container->container_type != EASYDBUS_ELTYPE_VARIANT)
00093       return -1;
00094 
00095    if (container->nel)
00096       return -1;
00097    string_length = strlen (string) + 1;
00098    container->p_data = malloc (string_length);
00099    if (container->p_data == NULL)
00100       return -1;
00101 
00102    EASYDBUS_MEMCOPY (container->p_data, string, string_length);
00103 
00104    container->nel = 1;
00105    container->elem_type = EASYDBUS_ELTYPE_OBJECT_PATH;
00106    return 0;
00107 }
00108 
00109 
00118 int
00119 easydbus_variant_add_signature (EasyDbus_container * container, 
00120                                 char *string) 
00121 {
00122    int string_length = 0;
00123 
00124    if (container == NULL || string == NULL)
00125       return -1;
00126 
00127    if (container->container_type != EASYDBUS_ELTYPE_VARIANT)
00128       return -1;
00129 
00130    if (container->nel)
00131       return -1;
00132    string_length = strlen (string) + 1;
00133    container->p_data = malloc (string_length);
00134    if (container->p_data == NULL)
00135       return -1;
00136 
00137    EASYDBUS_MEMCOPY (container->p_data, string, string_length);
00138 
00139    container->nel = 1;
00140    container->elem_type = EASYDBUS_ELTYPE_SIGNATURE;
00141    return 0;
00142 }
00143 
00151 int
00152 easydbus_variant_add_i32 (EasyDbus_container * container, 
00153                           int i32) 
00154 {
00155    int *temp;
00156 
00157    if (container == NULL)
00158       return -1;
00159 
00160    if (container->container_type != EASYDBUS_ELTYPE_VARIANT)
00161       return -1;
00162 
00163    if (container->nel)
00164       return -1;
00165    temp = (int *) malloc (sizeof (int));
00166    if (temp == NULL)
00167       return -1;
00168    memset (temp, 0, sizeof (int));
00169    *temp = i32;
00170    container->p_data = (void *) temp;
00171    container->nel = 1;
00172    container->elem_type = EASYDBUS_ELTYPE_INT32;
00173    return 0;
00174 }
00175 
00183 int
00184 easydbus_variant_add_ui32 (EasyDbus_container * container, 
00185                            unsigned int ui32) 
00186 {
00187    unsigned int *temp;
00188 
00189    if (container == NULL)
00190       return -1;
00191 
00192    if (container->container_type != EASYDBUS_ELTYPE_VARIANT)
00193       return -1;
00194 
00195    if (container->nel)
00196       return -1;
00197    temp = (unsigned int *) malloc (sizeof (int));
00198    if (temp == NULL)
00199       return -1;
00200    memset (temp, 0, sizeof (int));
00201    *temp = ui32;
00202    container->p_data = (void *) temp;
00203    container->nel = 1;
00204    container->elem_type = EASYDBUS_ELTYPE_UINT32;
00205    return 0;
00206 }
00207 
00215 int
00216 easydbus_variant_add_i16 (EasyDbus_container * container, 
00217                           short i16)
00218 {
00219    short *temp;
00220 
00221    if (container == NULL)
00222       return -1;
00223 
00224    if (container->container_type != EASYDBUS_ELTYPE_VARIANT)
00225       return -1;
00226 
00227    if (container->nel)
00228       return -1;
00229    temp = (short *) malloc (sizeof (short));
00230    if (temp == NULL)
00231       return -1;
00232    memset (temp, 0, sizeof (short));
00233    *temp = i16;
00234    container->p_data = (void *) temp;
00235    container->nel = 1;
00236    container->elem_type = EASYDBUS_ELTYPE_INT16;
00237    return 0;
00238 }
00239 
00248 int
00249 easydbus_variant_add_ui16 (EasyDbus_container * container,
00250                            unsigned short ui16)
00251 {
00252    unsigned short *temp;
00253 
00254    if (container == NULL)
00255       return -1;
00256 
00257    if (container->container_type != EASYDBUS_ELTYPE_VARIANT)
00258       return -1;
00259 
00260    if (container->nel)
00261       return -1;
00262    temp = (unsigned short *) malloc (sizeof (short));
00263    if (temp == NULL)
00264       return -1;
00265    memset (temp, 0, sizeof (short));
00266    *temp = ui16;
00267    container->p_data = (void *) temp;
00268    container->nel = 1;
00269    container->elem_type = EASYDBUS_ELTYPE_UINT16;
00270    return 0;
00271 }
00272 
00281 int
00282 easydbus_variant_add_ui64 (EasyDbus_container * container,
00283                            unsigned long long ui64)
00284 {
00285    unsigned long long *temp;
00286 
00287    if (container == NULL)
00288       return -1;
00289 
00290    if (container->container_type != EASYDBUS_ELTYPE_VARIANT)
00291       return -1;
00292 
00293    if (container->nel)
00294       return -1;
00295    temp = (unsigned long long *) malloc (sizeof (long long));
00296    if (temp == NULL)
00297       return -1;
00298    memset (temp, 0, sizeof (long long));
00299    *temp = ui64;
00300    container->p_data = (void *) temp;
00301    container->nel = 1;
00302    container->elem_type = EASYDBUS_ELTYPE_UINT64;
00303    return 0;
00304 }
00305 
00314 int
00315 easydbus_variant_add_i64 (EasyDbus_container * container,
00316                           long long i64)
00317 {
00318    long long *temp;
00319 
00320    if (container == NULL)
00321       return -1;
00322 
00323    if (container->container_type != EASYDBUS_ELTYPE_VARIANT)
00324       return -1;
00325 
00326    if (container->nel)
00327       return -1;
00328    temp = (long long *) malloc (sizeof (long long));
00329    if (temp == NULL)
00330       return -1;
00331    memset (temp, 0, sizeof (long long));
00332    *temp = i64;
00333    container->p_data = (void *) temp;
00334    container->nel = 1;
00335    container->elem_type = EASYDBUS_ELTYPE_INT64;
00336    return 0;
00337 }
00338 
00339 
00347 int
00348 easydbus_variant_add_double (EasyDbus_container * container, double d)
00349 {
00350    double *temp;
00351 
00352    if (container == NULL)
00353       return -1;
00354 
00355    if (container->container_type != EASYDBUS_ELTYPE_VARIANT)
00356       return -1;
00357 
00358    if (container->nel)
00359       return -1;
00360    temp = (double *) malloc (sizeof (double));
00361    if (temp == NULL)
00362       return -1;
00363    memset (temp, 0, sizeof (double));
00364    *temp = d;
00365    container->p_data = (void *) temp;
00366    container->nel = 1;
00367    container->elem_type = EASYDBUS_ELTYPE_DOUBLE;
00368    return 0;
00369 }
00370 
00378 int
00379 easydbus_variant_add_byte (EasyDbus_container * container, 
00380                            char byte)
00381 {
00382    if (container == NULL)
00383       return -1;
00384 
00385    if (container->container_type != EASYDBUS_ELTYPE_VARIANT)
00386       return -1;
00387 
00388    if (container->nel)
00389       return -1;
00390    container->p_data = malloc (1);
00391    if (container->p_data == NULL)
00392       return -1;
00393    memset (container->p_data, 0, 1);
00394    memcpy (container->p_data, &byte, 1);
00395    container->nel = 1;
00396    container->elem_type = EASYDBUS_ELTYPE_BYTE;
00397    return 0;
00398 }
00399 
00407 int
00408 easydbus_variant_add_boolean (EasyDbus_container * container,
00409                               char boolean)
00410 {
00411    if (container == NULL)
00412       return -1;
00413 
00414    if (container->container_type != EASYDBUS_ELTYPE_VARIANT)
00415       return -1;
00416 
00417    if (container->nel)
00418       return -1;
00419    container->p_data = malloc (1);
00420    if (container->p_data == NULL)
00421       return -1;
00422    EASYDBUS_MEMCOPY (container->p_data, &boolean, 1);
00423    container->nel = 1;
00424    container->elem_type = EASYDBUS_ELTYPE_BOOLEAN;
00425    return 0;
00426 }
00427 
00434 const char *
00435 easydbus_variant_get_string (EasyDbus_container * variant)
00436 {
00437    if (variant == NULL ||
00438        variant->container_type != EASYDBUS_ELTYPE_VARIANT ||
00439        variant->elem_type != EASYDBUS_ELTYPE_STRING)
00440       return NULL;
00441    return (const char *) variant->p_data;
00442 }
00443 
00450 const char *
00451 easydbus_variant_get_obj_path (EasyDbus_container * variant)
00452 {
00453    if (variant == NULL ||
00454        variant->container_type != EASYDBUS_ELTYPE_VARIANT ||
00455        variant->elem_type != EASYDBUS_ELTYPE_OBJECT_PATH)
00456       return NULL;
00457    return (const char *) variant->p_data;
00458 }
00459 
00466 const char *
00467 easydbus_variant_get_signature (EasyDbus_container * variant)
00468 {
00469    if (variant == NULL ||
00470        variant->container_type != EASYDBUS_ELTYPE_VARIANT ||
00471        variant->elem_type != EASYDBUS_ELTYPE_SIGNATURE)
00472       return NULL;
00473    return (const char *) variant->p_data;
00474 }
00475 
00482 int
00483 easydbus_variant_get_i32 (EasyDbus_container * variant)
00484 {
00485    if (variant == NULL ||
00486        variant->container_type != EASYDBUS_ELTYPE_VARIANT ||
00487        variant->elem_type != EASYDBUS_ELTYPE_INT32)
00488       return -1;
00489 
00490    return (int) *((int *) variant->p_data);
00491 }
00492 
00499 unsigned int
00500 easydbus_variant_get_ui32 (EasyDbus_container * variant)
00501 {
00502    if (variant == NULL ||
00503        variant->container_type != EASYDBUS_ELTYPE_VARIANT ||
00504        variant->elem_type != EASYDBUS_ELTYPE_UINT32)
00505       return -1;
00506 
00507    return (unsigned int) *((unsigned int *) variant->p_data);
00508 }
00509 
00516 short
00517 easydbus_variant_get_i16 (EasyDbus_container * variant)
00518 {
00519    if (variant == NULL ||
00520        variant->container_type != EASYDBUS_ELTYPE_VARIANT ||
00521        variant->elem_type != EASYDBUS_ELTYPE_INT16)
00522       return -1;
00523 
00524    return (short) *((short *) variant->p_data);
00525 }
00526 
00533 unsigned short
00534 easydbus_variant_get_ui16 (EasyDbus_container * variant)
00535 {
00536    if (variant == NULL ||
00537        variant->container_type != EASYDBUS_ELTYPE_VARIANT ||
00538        variant->elem_type != EASYDBUS_ELTYPE_UINT16)
00539       return -1;
00540 
00541    return (unsigned short) *((unsigned short *) variant->p_data);
00542 }
00543 
00550 unsigned long long
00551 easydbus_variant_get_ui64 (EasyDbus_container * variant)
00552 {
00553    if (variant == NULL ||
00554        variant->container_type != EASYDBUS_ELTYPE_VARIANT ||
00555        variant->elem_type != EASYDBUS_ELTYPE_UINT64)
00556       return -1;
00557 
00558    return (unsigned long long)
00559       *((unsigned long long *) variant->p_data);
00560 }
00561 
00568 long long
00569 easydbus_variant_get_i64 (EasyDbus_container * variant)
00570 {
00571    if (variant == NULL ||
00572        variant->container_type != EASYDBUS_ELTYPE_VARIANT ||
00573        variant->elem_type != EASYDBUS_ELTYPE_INT64)
00574       return -1;
00575 
00576    return (long long)
00577       *((long long *) variant->p_data);
00578 }
00579 
00586 double
00587 easydbus_variant_get_double (EasyDbus_container * variant)
00588 {
00589    if (variant == NULL ||
00590        variant->container_type != EASYDBUS_ELTYPE_VARIANT ||
00591        variant->elem_type != EASYDBUS_ELTYPE_DOUBLE)
00592       return -1;
00593 
00594    return (double) *((double *) variant->p_data);
00595 }
00596 
00603 char
00604 easydbus_variant_get_boolean (EasyDbus_container * variant)
00605 {
00606    if (variant == NULL ||
00607        variant->container_type != EASYDBUS_ELTYPE_VARIANT ||
00608        variant->elem_type != EASYDBUS_ELTYPE_BOOLEAN)
00609       return -1;
00610 
00611    return (char) *((char *) variant->p_data);
00612 }
00613 
00620 char
00621 easydbus_variant_get_byte (EasyDbus_container * variant)
00622 {
00623    if (variant == NULL ||
00624        variant->container_type != EASYDBUS_ELTYPE_VARIANT ||
00625        variant->elem_type != EASYDBUS_ELTYPE_BYTE)
00626       return -1;
00627 
00628    return (char) *((char *) variant->p_data);
00629 }
00630 // vim: ts=3 shiftwidth=3 expandtab

Generated on Thu Apr 10 10:00:18 2008 for EasyDbus-0.2 by  doxygen 1.5.4