git-svn-id: http://ltt.polymtl.ca/svn@461 04897980-b3bd-0310-b5e0-8ef037075253
[lttv.git] / ltt / branches / poly / ltt / type.c
index c7fdebba718adfca69872ff828f327e5d035ca7b..725b4e3486f81520875955e26bfc983bc74018a8 100644 (file)
@@ -1,7 +1,26 @@
+/* This file is part of the Linux Trace Toolkit viewer
+ * Copyright (C) 2003-2004 Xiangxiu Yang
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License Version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, 
+ * MA 02111-1307, USA.
+ */
+
 #include <stdio.h>
 
-#include <ltt/LTTTypes.h> 
 #include "parser.h"
+#include <ltt/ltt.h>
+#include "ltt-private.h"
 #include <ltt/type.h>
 
 static unsigned intSizes[] = {
@@ -60,12 +79,12 @@ LttFacility *ltt_eventtype_facility(LttEventType *et)
  *Input params
  *    et                        : an  event type   
  *Return value
- *    unsigned *                : the relative id
+ *    unsigned                  : the relative id
  ****************************************************************************/
 
-unsigned *ltt_eventtype_relative_id(LttEventType *et)
+unsigned ltt_eventtype_relative_id(LttEventType *et)
 {
-  return (unsigned*)&et->index;
+  return et->index;
 }
 
 /*****************************************************************************
@@ -74,14 +93,12 @@ unsigned *ltt_eventtype_relative_id(LttEventType *et)
  *Input params
  *    et               : an  event type   
  *Return value
- *    unsigned *       : the id
+ *    unsigned         : the id
  ****************************************************************************/
 
-unsigned *ltt_eventtype_id(LttEventType *et)
+unsigned ltt_eventtype_id(LttEventType *et)
 {
-  unsigned *id = g_new(unsigned,1);
-  *id = et->facility->base_id + et->index;
-  return (unsigned*)id;
+  return et->facility->base_id + et->index;
 }
 
 /*****************************************************************************
@@ -95,6 +112,7 @@ unsigned *ltt_eventtype_id(LttEventType *et)
 
 LttType *ltt_eventtype_type(LttEventType *et)
 {
+  if(!et->root_field) return NULL;
   return et->root_field->field_type;
 }
 
@@ -164,12 +182,18 @@ unsigned ltt_type_size(LttTrace * trace, LttType *t)
       return intSizes[t->size];
     else{
       LttArchSize size = trace->system_description->size;
-      if(size == LTT_LP32)
-       return sizeof(int16_t);
-      else if(size == LTT_ILP32 || size == LTT_LP64)
-       return sizeof(int32_t);
-      else if(size == LTT_ILP64)
-       return sizeof(int64_t); 
+      if(size == LTT_LP32){
+       if(t->size == 5)return sizeof(int16_t);
+       else return sizeof(int32_t);
+      }
+      else if(size == LTT_ILP32 || size == LTT_LP64){
+       if(t->size == 5)return sizeof(int32_t);
+       else{
+         if(size == LTT_ILP32) return sizeof(int32_t);
+         else return sizeof(int64_t);
+       }
+      }
+      else if(size == LTT_ILP64)return sizeof(int64_t);              
     }
   }
 }
@@ -233,10 +257,11 @@ unsigned ltt_type_member_number(LttType *t)
  *    LttType *           : the type of structure member
  ****************************************************************************/
 
-LttType *ltt_type_member_type(LttType *t, unsigned i)
+LttType *ltt_type_member_type(LttType *t, unsigned i, char ** name)
 {
-  if(t->type_class != LTT_STRUCT) return NULL;
-  if(i >= t->element_number || i < 0 ) return NULL;
+  if(t->type_class != LTT_STRUCT){*name == NULL; return NULL;}
+  if(i >= t->element_number || i < 0 ){*name = NULL; return NULL;}
+  *name = t->element_type[i]->element_name;
   return t->element_type[i];
 }
 
@@ -306,6 +331,12 @@ LttField *ltt_field_member(LttField *f, unsigned i)
 
 LttType *ltt_field_type(LttField *f)
 {
+  if(!f)return NULL;
   return f->field_type;
 }
 
+int ltt_field_size(LttField * f)
+{
+  if(!f)return 0;
+  return f->field_size;
+}
This page took 0.024253 seconds and 4 git commands to generate.