00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef KATE_kate_internal_h_GUARD
00011 #define KATE_kate_internal_h_GUARD
00012
00013 #define KATE_LIMIT_COMMENTS 4096
00014 #define KATE_LIMIT_COMMENT_LENGTH 4096
00015 #define KATE_LIMIT_REGIONS 4096
00016 #define KATE_LIMIT_STYLES 4096
00017 #define KATE_LIMIT_CURVE_POINTS 4096
00018 #define KATE_LIMIT_CURVES 4096
00019 #define KATE_LIMIT_MOTION_CURVES 4096
00020 #define KATE_LIMIT_MOTIONS 4096
00021 #define KATE_LIMIT_PALETTES 4096
00022 #define KATE_LIMIT_BITMAPS 4096
00023 #define KATE_LIMIT_BITMAP_SIZE 4096
00024 #define KATE_LIMIT_BITMAP_RAW_SIZE 4194304
00025 #define KATE_LIMIT_FONT_RANGES 4096
00026 #define KATE_LIMIT_FONT_MAPPINGS 4096
00027 #define KATE_LIMIT_FONT_MAPPING_RANGES 4096
00028 #define KATE_LIMIT_TEXT_MOTIONS 4096
00029 #define KATE_LIMIT_LANGUAGE_LENGTH 1024
00030 #define KATE_LIMIT_TEXT_LENGTH 1048576
00031
00032 #include "config.h"
00033
00034 #include "kate/kate.h"
00035
00036 #if !defined __GNUC__ || (((__GNUC__*0x100)+(__GNUC_MINOR__+0))<0x0303)
00037 #define __attribute__(x)
00038 #endif
00039
00040 #ifdef __ELF__
00041 #define kate_internal __attribute__((visibility("internal")))
00042 #else
00043 #define kate_internal
00044 #endif
00045
00046
00047 #define KATE_TYPE_HALF_MAX_SIGNED(type) ((type)1 << (sizeof(type)*8-2))
00048 #define KATE_TYPE_MAX_SIGNED(type) (KATE_TYPE_HALF_MAX_SIGNED(type) - 1 + KATE_TYPE_HALF_MAX_SIGNED(type))
00049 #define KATE_TYPE_MIN_SIGNED(type) (-1 - KATE_TYPE_MAX_SIGNED(type))
00050 #define KATE_TYPE_MIN(type) ((type)-1 < 1?KATE_TYPE_MIN_SIGNED(type):(type)0)
00051 #define KATE_TYPE_MAX(type) ((type)~KATE_TYPE_MIN(type))
00052
00053 static inline int kate_check_add_overflow(size_t x,size_t y,size_t *res) __attribute__((pure));
00054 static inline int kate_check_add_overflow(size_t x,size_t y,size_t *res)
00055 {
00056 if (KATE_TYPE_MAX(size_t)-(y)>=x) {
00057 if (res) *res=x+y;
00058 return 0;
00059 }
00060 return KATE_E_LIMIT;
00061 }
00062
00063 static inline int kate_check_mul_overflow_generic(size_t x,size_t y,size_t *res) __attribute__((pure));
00064 static inline int kate_check_mul_overflow_generic(size_t x,size_t y,size_t *res)
00065 {
00066 kate_uint64_t r,mask;
00067 if ((x&y)>>(sizeof(size_t)*4)) return KATE_E_LIMIT;
00068 mask=KATE_TYPE_MAX(size_t)>>(sizeof(size_t)*4);
00069 r=(x>>(sizeof(size_t)*4))*(y&mask)+(y>>(sizeof(size_t)*4))*(x&mask);
00070 if (r>>(sizeof(size_t)*4)) return KATE_E_LIMIT;
00071 r<<=(sizeof(size_t)*4);
00072 return kate_check_add_overflow(r,(x&mask)*(y&mask),res);
00073 }
00074
00075 static inline int kate_check_mul_overflow(size_t x,size_t y,size_t *res) __attribute__((pure));
00076 static inline int kate_check_mul_overflow(size_t x,size_t y,size_t *res)
00077 {
00078 if (sizeof(size_t)>4) {
00079 return kate_check_mul_overflow_generic(x,y,res);
00080 }
00081 else {
00082 kate_uint64_t r=((kate_uint64_t)x)*y;
00083 if ((r>>(sizeof(size_t)*4))>>(sizeof(size_t)*4)) return KATE_E_LIMIT;
00084 if (res) *res=(size_t)r;
00085 return 0;
00086 }
00087 }
00088
00089
00090 extern kate_int64_t kate_time_granule(const kate_info *ki,kate_float base,kate_float offset) kate_internal;
00091
00092
00093 extern int kate_motion_destroy(const kate_info *ki,kate_motion **motions,const int *destroy,size_t nmotions,int force) kate_internal;
00094
00095
00096 extern kate_event *kate_event_create(const kate_info *ki) kate_internal;
00097 extern int kate_event_track(kate_event *ev) kate_internal;
00098 extern int kate_event_release(kate_event *ev) kate_internal;
00099 extern int kate_event_destroy(kate_event *ev) kate_internal;
00100
00101
00102 extern int kate_find_region(const kate_info *ki,const kate_region *kr);
00103 extern int kate_find_style(const kate_info *ki,const kate_style *ks);
00104 extern int kate_find_curve(const kate_info *ki,const kate_curve *kc);
00105 extern int kate_find_motion(const kate_info *ki,const kate_motion *km);
00106 extern int kate_find_palette(const kate_info *ki,const kate_palette *kp);
00107 extern int kate_find_bitmap(const kate_info *ki,const kate_bitmap *kb);
00108 extern int kate_find_font_range(const kate_info *ki,const kate_font_range *kfr);
00109 extern int kate_find_font_mapping(const kate_info *ki,const kate_font_mapping *kfm);
00110
00111
00112 extern int kate_ascii_strncasecmp(const char *s0,const char *s1,size_t n) kate_internal __attribute__((pure));
00113
00114 extern int kate_is_valid_code_point(int c) kate_internal __attribute__((const));
00115
00116 extern int kate_font_check_ranges(const kate_font_mapping *kfm);
00117
00118 extern void *kate_checked_malloc(size_t n,size_t sz) kate_internal __attribute__((malloc));
00119 extern void *kate_checked_realloc(void *ptr,size_t n,size_t sz) kate_internal;
00120
00121 #endif
00122