Changeset 6681 for trunk/ARBDB/arbdb.cxx

Show
Ignore:
Timestamp:
30/07/10 16:11:07 (19 months ago)
Author:
westram
Message:
  • added GB_key_2_existing_quark (like GB_key_2_quark, but returns 0 for non-existing quarks)
  • use GB_key_2_existing_quark in gb_delete_main_entry (avoid creating GB_SYSTEM_FOLDER after failed client connect). This fixes crash of arb_message when no server was running! (introduced in [6648])
  • gb_pre_delete_entry
    • if no remote_hash exists, do not erase anything from there
  • rewrote GB_key_2_quark() and gb_key_2_quark() using gb_key_2_existing_quark()
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/ARBDB/arbdb.cxx

    r6667 r6681  
    12441244 
    12451245 
    1246 GBQUARK GB_key_2_quark(GBDATA *gbd, const char *s) { 
    1247     long          index; 
    1248     GB_MAIN_TYPE *Main = GB_MAIN(gbd); 
    1249  
    1250     if (!s) return -1; 
    1251     index = GBS_read_hash(Main->key_2_index_hash, s); 
    1252     if (!index) {   // create new index 
    1253         index = gb_create_key(Main, s, true); 
    1254     } 
    1255     return (GBQUARK)index; 
    1256 } 
     1246GBQUARK gb_key_2_existing_quark(GB_MAIN_TYPE *Main, const char *key) { 
     1247    /*! @return existing quark for 'key' 
     1248     *          -1 = key is NULL 
     1249     *           0 = no quark exists 
     1250     *        else = quark 
     1251     */ 
     1252 
     1253    GBQUARK quark  = -1; 
     1254    if (key) quark = GBS_read_hash(Main->key_2_index_hash, key); 
     1255    return quark; 
     1256} 
     1257 
     1258GBQUARK GB_key_2_quark(GBDATA *gbd, const char *key) { 
     1259    /*! find or create quark for 'key' 
     1260     * @return -1 if key is NULL, else existing or created quark 
     1261     */ 
     1262 
     1263    GB_MAIN_TYPE *Main  = GB_MAIN(gbd); 
     1264    GBQUARK       quark = gb_key_2_existing_quark(Main, key); 
     1265    if (!quark) quark   = gb_create_key(GB_MAIN(gbd), key, true); 
     1266    return quark; 
     1267} 
     1268 
     1269#if defined(DEVEL_RALF) 
     1270#warning add gb_NULLkey_2_quark allowing NULL as key 
     1271#endif // DEVEL_RALF 
     1272 
     1273GBQUARK gb_key_2_quark(GB_MAIN_TYPE *Main, const char *key) { 
     1274    // similar to GB_key_2_quark,  
     1275    // but if 'key' is NULL, quark 0 will be returned. 
     1276    //  
     1277    // Use this function with care. 
     1278    // 
     1279    // Known good use: 
     1280    // - create main entry and its dummy father via gb_make_container() 
     1281    // 
     1282    // Other uses (maybe just to pass GB_MAIN_TYPE instead of GBDATA as GB_key_2_quark likes): 
     1283    // - gb_rename_entry 
     1284    // - gb_make_entry 
     1285    // - compress_sequence_tree 
     1286    // - dictionary compression (several calls) 
     1287 
     1288    GBQUARK quark = 0; 
     1289    if (key) { 
     1290        quark             = gb_key_2_existing_quark(Main, key); 
     1291        if (!quark) quark = gb_create_key(Main, key, true); 
     1292        gb_assert(quark>0); 
     1293    } 
     1294    return quark; 
     1295} 
     1296 
     1297// --------------------------------------------- 
    12571298 
    12581299GBQUARK GB_get_quark(GBDATA *gbd) { 
     
    12651306} 
    12661307 
    1267 GBQUARK gb_key_2_quark(GB_MAIN_TYPE *Main, const char *s) { 
    1268     long index; 
    1269     if (!s) return 0; 
    1270     index = GBS_read_hash(Main->key_2_index_hash, s); 
    1271     if (!index) {   // create new index 
    1272         index = gb_create_key(Main, s, true); 
    1273     } 
    1274     return (GBQUARK)index; 
    1275 } 
    1276  
    1277  
    1278  
    1279  
    1280 long GB_read_clock(GBDATA *gbd) 
    1281 { 
     1308// --------------------------------------------- 
     1309 
     1310long GB_read_clock(GBDATA *gbd) { 
    12821311    if (GB_ARRAY_FLAGS(gbd).changed) return GB_MAIN(gbd)->clock; 
    12831312    return GB_GET_EXT_UPDATE_DATE(gbd); 
    12841313} 
    12851314 
    1286 long    GB_read_transaction(GBDATA *gbd) 
    1287 { 
     1315long GB_read_transaction(GBDATA *gbd) { 
    12881316    return GB_MAIN(gbd)->transaction; 
    12891317}