Subversion Repositories HelenOS

Rev

Rev 4192 | Rev 4332 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4192 Rev 4197
Line 98... Line 98...
98
 
98
 
99
int char_map_add_item( char_map_ref map, const char * identifier, size_t length, const int value ){
99
int char_map_add_item( char_map_ref map, const char * identifier, size_t length, const int value ){
100
    if( map->next == ( map->size - 1 )){
100
    if( map->next == ( map->size - 1 )){
101
        char_map_ref    * tmp;
101
        char_map_ref    * tmp;
102
 
102
 
103
        tmp = ( char_map_ref * ) malloc( sizeof( char_map_ref ) * 2 * map->size );
103
        tmp = ( char_map_ref * ) realloc( map->items, sizeof( char_map_ref ) * 2 * map->size );
104
        if( ! tmp ) return ENOMEM;
104
        if( ! tmp ) return ENOMEM;
105
        map->size *= 2;
105
        map->size *= 2;
106
        memcpy( tmp, map->items, sizeof( char_map_ref ) * map->next );
-
 
107
        free( map->items );
-
 
108
        map->items = tmp;
106
        map->items = tmp;
109
    }
107
    }
110
    map->items[ map->next ] = ( char_map_ref ) malloc( sizeof( char_map_t ));
108
    map->items[ map->next ] = ( char_map_ref ) malloc( sizeof( char_map_t ));
111
    if( ! map->items[ map->next ] ) return ENOMEM;
109
    if( ! map->items[ map->next ] ) return ENOMEM;
112
    char_map_initialize( map->items[ map->next ] );
110
    if( char_map_initialize( map->items[ map->next ] ) != EOK ){
-
 
111
        free( map->items[ map->next ] );
-
 
112
        map->items[ map->next ] = NULL;
-
 
113
        return ENOMEM;
-
 
114
    }
113
    map->items[ map->next ]->c = * identifier;
115
    map->items[ map->next ]->c = * identifier;
114
    ++ identifier;
116
    ++ identifier;
115
    if( length ) -- length;
117
    if( length ) -- length;
116
    ++ map->next;
118
    ++ map->next;
117
    if( length || ( * identifier )){
119
    if( length || ( * identifier )){
Line 130... Line 132...
130
        map->magic = 0;
132
        map->magic = 0;
131
        for( index = 0; index < map->next; ++ index ){
133
        for( index = 0; index < map->next; ++ index ){
132
            char_map_destroy( map->items[ index ] );
134
            char_map_destroy( map->items[ index ] );
133
        }
135
        }
134
        free( map->items );
136
        free( map->items );
-
 
137
        map->items = NULL;
135
    }
138
    }
136
}
139
}
137
 
140
 
138
int char_map_exclude( char_map_ref map, const char * identifier, size_t length ){
141
int char_map_exclude( char_map_ref map, const char * identifier, size_t length ){
139
    char_map_ref    node;
142
    char_map_ref    node;
Line 177... Line 180...
177
    return char_map_is_valid( map ) ? map->value : CHAR_MAP_NULL;
180
    return char_map_is_valid( map ) ? map->value : CHAR_MAP_NULL;
178
}
181
}
179
 
182
 
180
int char_map_initialize( char_map_ref map ){
183
int char_map_initialize( char_map_ref map ){
181
    if( ! map ) return EINVAL;
184
    if( ! map ) return EINVAL;
182
    map->c = 0;
185
    map->c = '\0';
183
    map->value = CHAR_MAP_NULL;
186
    map->value = CHAR_MAP_NULL;
184
    map->size = 2;
187
    map->size = 2;
185
    map->next = 0;
188
    map->next = 0;
186
    map->items = malloc( sizeof( char_map_ref ) * map->size );
189
    map->items = malloc( sizeof( char_map_ref ) * map->size );
187
    if( ! map->items ) return ENOMEM;
190
    if( ! map->items ){
-
 
191
        map->magic = 0;
-
 
192
        return ENOMEM;
-
 
193
    }
188
    map->items[ map->next ] = NULL;
194
    map->items[ map->next ] = NULL;
189
    map->magic = CHAR_MAP_MAGIC_VALUE;
195
    map->magic = CHAR_MAP_MAGIC_VALUE;
190
    return EOK;
196
    return EOK;
191
}
197
}
192
 
198