/* * Copyright (c) 1995-1997 Sun Microsystems, Inc. All Rights Reserved. * * Permission to use, copy, modify, and distribute this software * and its documentation for NON-COMMERCIAL purposes and without * fee is hereby granted provided that this copyright notice * appears in all copies. Please refer to the file "copyright.html" * for further important copyright and licensing information. * * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. */ #include #include #include "InputFile.h" #include "OutputFile.h" #include #include #include #include #include #define LOCAL_PATH_SEPARATOR '/' static void convertPath(char *path) { while (*path != '\0') { if ((*path == InputFile_separatorChar) || (*path == OutputFile_separatorChar)) { *path = LOCAL_PATH_SEPARATOR; } path++; } return; } long InputFile_open(struct HInputFile *this) { int fd; char buf[MAXPATHLEN]; javaString2CString(unhand(this)->path, buf, sizeof(buf)); convertPath(buf); fd = open(buf, O_RDONLY); if (fd < 0) return(FALSE); unhand(this)->fd = fd; return(TRUE); } void InputFile_close(struct HInputFile *this) { close(unhand(this)->fd); unhand(this)->fd = -1; return; } long InputFile_read(struct HInputFile *this, HArrayOfByte *b, long len) { char *data = unhand(b)->body; int count = obj_length(b); int actual; if (count < len) { actual = count; } else { actual = len; } actual = read(unhand(this)->fd, data, actual); if (actual == 0) return(-1); return(actual); }