MAGIC Magic Mailing List
 
 

From: R. Timothy Edwards (tim AT stravinsky DOT jhuapl.edu)
Date: Mon Mar 04 2002 - 09:33:29 EST

  • Next message: Martin Guthrie: "General Help"

    Dear Jeff,
    
       Prakash Chand pointed out to me an error that I initially blamed on
    "readline" but eventually decided stems from your cellname completion
    function code.  Prakash writes:
    
    > If you take a cif file, do a "cif read" on it, then type "load" and
    > hit the Tab button to prompt for the cell names, Magic crashes.
    
    Magic crashes at txInput.c, line 700, inside "cellname_completion_function":
    
      /* Also complete cells that are in main memory only */
      while( (he = HashNext(&dbCellDefTable, &db_hs)) != (HashEntry *)NULL ) {
        CellDef *cd = (CellDef *)HashGetValue(he);
        if( !(cd->cd_flags & CDINTERNAL) && strcmp(cd->cd_name, UNNAMED) != 0 &&
            strncmp(cd->cd_name, text, len) == 0 ) {
          return strdup(cd->cd_name);
        }
      }
    
    HashGetValue(he) returns cd=NULL, which causes the crash at line 700.
    
    I am skeptical of the update_cellname_hash() routine, which appears to
    collect a list of cells by doing a directory list of the directories
    in the search path.  This method ignores the fact that the magic "load"
    command first looks at the internal database of cells before trying to
    load from a path.  So I think what is happening is that by reading
    "foo.cif" first, is that the cells exist only in internal memory, and
    there may not be ANY .mag files in the search path, leading to an
    empty hash table which apparently returns a NULL result (though I'm
    not sure why it would do that, but I guess that HashInit puts some
    kind of entry).
    
    Bottom line is, the routines need two corrections:  1) NULL return
    from HashFind should be ignored (or alternately, HashInit should not
    be executed until something exists to be put in the hash table;  ignoring
    NULL is a lot easier to implement), and 2) update_cellname_hash should
    look through the internal cell database as well as the directories
    in the search path.
    
    						Regards,
    						Tim
    


  •  
     
    Questions? Contact Rajit Manohar
    cornell logo