home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Freesoft 1997 May
/
Freesoft_1997-05_cd.bin
/
recenz
/
PROGRAM
/
JAVADRAW
/
iavadraw301_inst.exe
/
data.z
/
InputFileImpl.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-05-20
|
2KB
|
86 lines
/*
* Copyright (c) 1995, 1996 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 <StubPreamble.h>
#include <javaString.h>
#include "InputFile.h"
#include "OutputFile.h"
#include <sys/types.h>
#include <sys/param.h>
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#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);
}