BINDING b = {boundname, target}, *ba = &b;
BINDING b, *ba = &b; b.binding = boundname; b.target = target;
search(     char *target,    time_t *time,    char **another_target){	PATHNAME f[1];    LIST    *varlist;    string    buf[1];    int     found = 0;    /* Will be set to 1 if target location is specified via LOCATE. */    int     explicitly_located = 0;    char    *boundname = 0;    if( another_target )        *another_target = 0;    if (! explicit_bindings )        explicit_bindings = hashinit( sizeof(BINDING),                                      "explicitly specified locations");    string_new( buf );    /* Parse the filename */	path_parse( target, f );    f->f_grist.ptr = 0;    f->f_grist.len = 0;    if( varlist = var_get( "LOCATE" ) )      {        f->f_root.ptr = varlist->string;        f->f_root.len = strlen( varlist->string );	    path_build( f, buf, 1 );        if( DEBUG_SEARCH )            printf( "locate %s: %s\n", target, buf->value );        explicitly_located = 1;        timestamp( buf->value, time );        found = 1;    }    else if( varlist = var_get( "SEARCH" ) )    {        while( varlist )        {            BINDING b, *ba = &b;            f->f_root.ptr = varlist->string;            f->f_root.len = strlen( varlist->string );            string_truncate( buf, 0 );            path_build( f, buf, 1 );            if( DEBUG_SEARCH )                printf( "search %s: %s\n", target, buf->value );            timestamp( buf->value, time );            b.binding = buf->value;                        if( hashcheck( explicit_bindings, (HASHDATA**)&ba ) )            {                if( DEBUG_SEARCH )                    printf(" search %s: found explicitly located target %s\n",                            target, ba->target);                if( another_target )                    *another_target = ba->target;                found = 1;                break;                            }            else if( *time )            {                found = 1;                break;            }            varlist = list_next( varlist );        }    }    if (!found)    {        /* Look for the obvious */        /* This is a questionable move.  Should we look in the */        /* obvious place if SEARCH is set? */        f->f_root.ptr = 0;        f->f_root.len = 0;        string_truncate( buf, 0 );        path_build( f, buf, 1 );        if( DEBUG_SEARCH )            printf( "search %s: %s\n", target, buf->value );        timestamp( buf->value, time );    }    boundname = newstr( buf->value );    string_free( buf );    if (explicitly_located)    {        BINDING b = {boundname, target}, *ba = &b;        /* CONSIDER: we probably should issue a warning is another file           is explicitly bound to the same location. This might break           compatibility, though. */        hashenter(explicit_bindings, (HASHDATA**)&ba);    }            /* prepare a call to BINDRULE if the variable is set */    call_bind_rule( target, boundname );    return boundname;}