genevent fix : warnings
[lttv.git] / genevent-new / genevent.c
index 1f9a5e09fc4cbd8224c6292fd2dc242c9ebf8ae0..aabc69979ea772ec94344a952b26765529666c6e 100644 (file)
@@ -224,87 +224,87 @@ int print_arg(type_descriptor_t * td, FILE *fd, unsigned int tabs,
        switch(td->type) {
                case INT_FIXED:
                        fprintf(fd, "%s", intOutputTypes[getSizeindex(td->size)]);
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, "lttng_param_%s", field_name);
                        break;
                case UINT_FIXED:
                        fprintf(fd, "%s", uintOutputTypes[getSizeindex(td->size)]);
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, "lttng_param_%s", field_name);
                        break;
                case CHAR:
                        fprintf(fd, "signed char");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case UCHAR:
                        fprintf(fd, "unsigned char");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case SHORT:
                        fprintf(fd, "short");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case USHORT:
                        fprintf(fd, "unsigned short");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case INT:
                        fprintf(fd, "int");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case UINT:
                        fprintf(fd, "unsigned int");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case FLOAT:
                        fprintf(fd, "%s", floatOutputTypes[getSizeindex(td->size)]);
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case POINTER:
                        fprintf(fd, "const void *");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case LONG:
                        fprintf(fd, "long");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case ULONG:
                        fprintf(fd, "unsigned long");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case SIZE_T:
                        fprintf(fd, "size_t");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case SSIZE_T:
                        fprintf(fd, "ssize_t");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case OFF_T:
                        fprintf(fd, "off_t");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case STRING:
                        fprintf(fd, "const char *");
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case ENUM:
                        fprintf(fd, "enum lttng_%s", basename);
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case ARRAY:
                        fprintf(fd, "lttng_array_%s", basename);
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
                case SEQUENCE:
                        fprintf(fd, "lttng_sequence_%s *", basename);
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
        case STRUCT:
                        fprintf(fd, "struct lttng_%s *", basename);
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
        case UNION:
                        fprintf(fd, "union lttng_%s *", basename);
-                       fprintf(fd, " %s", field_name);
+                       fprintf(fd, " lttng_param_%s", field_name);
                        break;
        default:
                        printf("print_type : unknown type\n");
@@ -734,6 +734,51 @@ int print_type_write(type_descriptor_t * td, FILE *fd, unsigned int tabs,
        return 0;
 }
 
+/* print need local vars ?.
+ *
+ * Copied from print_type_write
+ *
+ * Does the type_write call needs local size and from variables ?
+ * return value : 1 yes, 0 no.
+ */
+
+int has_type_local(type_descriptor_t * td)
+{
+       switch(td->type) {
+               case INT_FIXED:
+               case UINT_FIXED:
+               case CHAR:
+               case UCHAR:
+               case SHORT:
+               case USHORT:
+               case INT:
+               case UINT:
+               case FLOAT:
+               case POINTER:
+               case LONG:
+               case ULONG:
+               case SIZE_T:
+               case SSIZE_T:
+               case OFF_T:
+               case ENUM:
+                       return 1;
+                       break;
+               case STRING:
+               case SEQUENCE:
+               case STRUCT:
+               case UNION:
+               case ARRAY:
+                       return 0;
+                       break;
+               case NONE:
+                       printf("Error : type NONE unexpected\n");
+                       return 1;
+                       break;
+       }
+
+       return 0;
+}
+
 
 
 /* print type alignment function.
@@ -986,8 +1031,11 @@ int print_type_write_fct(type_descriptor_t * td, FILE *fd, unsigned int tabs,
        }
 
        fprintf(fd, "{\n");
+
+       print_tabs(1, fd);
+       fprintf(fd, "size_t size;\n");
        print_tabs(1, fd);
-       fprintf(fd, "size_t align, size;\n");
+       fprintf(fd, "size_t align;\n");
        fprintf(fd, "\n");
 
        switch(td->type) {
@@ -1195,6 +1243,7 @@ int print_event_logging_function(char *basename, facility_t *fac,
 {
        fprintf(fd, "static inline void trace_%s(\n", basename);
        int     has_argument = 0;
+       int has_type_fixed = 0;
 
   /* Does it support per trace tracing ? */
   if(event->per_trace) {
@@ -1256,10 +1305,6 @@ int print_event_logging_function(char *basename, facility_t *fac,
        print_tabs(1, fd);
        fprintf(fd, "size_t *to = &real_to;\n");
        print_tabs(1, fd);
-       fprintf(fd, "const void *real_from;\n");
-       print_tabs(1, fd);
-       fprintf(fd, "const void **from = &real_from;\n");
-       print_tabs(1, fd);
        fprintf(fd, "size_t real_len = 0;\n");
        print_tabs(1, fd);
        fprintf(fd, "size_t *len = &real_len;\n");
@@ -1268,8 +1313,27 @@ int print_event_logging_function(char *basename, facility_t *fac,
        print_tabs(1, fd);
        fprintf(fd, "size_t slot_size;\n");
        print_tabs(1, fd);
-       fprintf(fd, "size_t size;\n");
-       print_tabs(1, fd);
+
+       if(event->fields.position > 0) {
+               for(unsigned int i=0;i<event->fields.position;i++){
+                       /* Search for at least one child with fixed size. It means
+                        * we need local variables.*/
+                       field_t *field = (field_t*)(event->fields.array[i]);
+                       type_descriptor_t *type = field->type;
+                       has_type_fixed = has_type_local(type);
+                       if(has_type_fixed) break;
+               }
+               
+               if(has_type_fixed) {
+                       fprintf(fd, "size_t size;\n");
+                       print_tabs(1, fd);
+               }
+
+               fprintf(fd, "const void *real_from;\n");
+               print_tabs(1, fd);
+               fprintf(fd, "const void **from = &real_from;\n");
+               print_tabs(1, fd);
+       }
        fprintf(fd, "cycles_t tsc;\n");
        print_tabs(1, fd);
        fprintf(fd, "size_t before_hdr_pad, after_hdr_pad, header_size;\n");
@@ -1305,15 +1369,15 @@ int print_event_logging_function(char *basename, facility_t *fac,
                        case ARRAY:
                        case STRUCT:
                        case STRING:
-                               fprintf(fd, "*from = %s;\n", field->name);
+                               fprintf(fd, "*from = lttng_param_%s;\n", field->name);
                                break;
                        default:
-                               fprintf(fd, "*from = &%s;\n", field->name);
+                               fprintf(fd, "*from = &lttng_param_%s;\n", field->name);
                                break;
                }
 
                if(print_type_write(type,
-                               fd, 1, basename, field->name, "", 0)) return 1;
+                               fd, 1, basename, field->name, "lttng_param_", 0)) return 1;
                fprintf(fd, "\n");
        }
        print_tabs(1, fd);
@@ -1401,16 +1465,16 @@ int print_event_logging_function(char *basename, facility_t *fac,
                        case ARRAY:
                        case STRUCT:
                        case STRING:
-                               fprintf(fd, "*from = %s;\n", field->name);
+                               fprintf(fd, "*from = lttng_param_%s;\n", field->name);
                                break;
                        default:
-                               fprintf(fd, "*from = &%s;\n", field->name);
+                               fprintf(fd, "*from = &lttng_param_%s;\n", field->name);
                                break;
                }
 
 
                if(print_type_write(type,
-                               fd, 2, basename, field->name, "", 0)) return 1;
+                               fd, 2, basename, field->name, "lttng_param_", 0)) return 1;
                fprintf(fd, "\n");
                
                /* Don't forget to flush pending memcpy */
This page took 0.033361 seconds and 4 git commands to generate.