guard read in tap.c