I am writing code to read from the serial port on my linux machine. I go through the initialization and then when i call read(fd...) in the main function I can read the data correctly. Once I try to pass the fd to another function, so main is short and sweet, the data i get is garbage. I have been struggling with this error for so long that I have even tried doing all the init and reading in the function I want to handle the data and after everything is initialized properly, the read still gives me garbage.

Code:
void sample(int fd)
{
	int i;
	char* buf = (char*)malloc(128);
	for(i=0;i<100;i++) { read(fd, buf, 1); printf("%s", buf); fflush(stdout); }
	
	
} // sample

int init(int* fd)
{
        struct termios oldtio, newtio;
        *fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY);
	if (*fd <0) { perror(MODEMDEVICE); exit(-1); }
	
	tcgetattr(*fd,&oldtio); /* save current modem settings */
	newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
	newtio.c_iflag = IGNPAR;
	newtio.c_oflag = 0;
	newtio.c_lflag = 0;
	newtio.c_cc[VMIN]=1;
	newtio.c_cc[VTIME]=0;
	tcflush(*fd, TCIFLUSH);
	tcsetattr(*fd,TCSANOW,&newtio);

       return(1);
} // init

int main( int argc , char * argv[] )
{
    int fd;
    char* buf = (char*)malloc(128);
    if (!init(&fd))
      return 1;
    for(i=0;i<100;i++) { read(fd, buf, 1); printf("%s", buf); fflush(stdout); } // works

    sample(fd); // fails
    close(fd);
} // main
I have printed out both file descriptors before I do my read and they are the same value. So is there something else that is the reason behind my issue?

Thanks,
Chris