follow the c driver apis