83 |
#define CONVERT_JINT_TO_SSIZE_T(x) (x) |
#define CONVERT_JINT_TO_SSIZE_T(x) (x) |
84 |
|
|
85 |
/* These values must be kept in sync with FileDescriptor.java. */ |
/* These values must be kept in sync with FileDescriptor.java. */ |
86 |
#define SET 0 |
#define FILEDESCRIPTOR_FILESEEK_SET 0 |
87 |
#define CUR 1 |
#define FILEDESCRIPTOR_FILESEEK_CUR 1 |
88 |
#define END 2 |
#define FILEDESCRIPTOR_FILESEEK_END 2 |
89 |
#define READ 1 |
|
90 |
#define WRITE 2 |
#define FILEDESCRIPTOR_FILEOPEN_FLAG_READ 1 |
91 |
#define APPEND 4 |
#define FILEDESCRIPTOR_FILEOPEN_FLAG_WRITE 2 |
92 |
#define EXCL 8 |
#define FILEDESCRIPTOR_FILEOPEN_FLAG_APPEND 4 |
93 |
#define SYNC 16 |
#define FILEDESCRIPTOR_FILEOPEN_FLAG_EXCL 8 |
94 |
#define DSYNC 32 |
#define FILEDESCRIPTOR_FILEOPEN_FLAG_SYNC 16 |
95 |
|
#define FILEDESCRIPTOR_FILEOPEN_FLAG_DSYNC 32 |
96 |
|
|
97 |
/*************************************************************************/ |
/*************************************************************************/ |
98 |
|
|
148 |
return(-1); /* Exception will already have been thrown */ |
return(-1); /* Exception will already have been thrown */ |
149 |
|
|
150 |
/* get file/permission flags for open() */ |
/* get file/permission flags for open() */ |
151 |
if ((jflags & READ) && (jflags & WRITE)) |
if ((jflags & FILEDESCRIPTOR_FILEOPEN_FLAG_READ) && (jflags & FILEDESCRIPTOR_FILEOPEN_FLAG_WRITE)) |
152 |
{ |
{ |
153 |
/* read/write */ |
/* read/write */ |
154 |
flags = TARGET_NATIVE_FILE_FILEFLAG_CREATE | TARGET_NATIVE_FILE_FILEFLAG_READWRITE; |
flags = TARGET_NATIVE_FILE_FILEFLAG_CREATE | TARGET_NATIVE_FILE_FILEFLAG_READWRITE; |
155 |
permissions = TARGET_NATIVE_FILE_FILEPERMISSION_NORMAL; |
permissions = TARGET_NATIVE_FILE_FILEPERMISSION_NORMAL; |
156 |
} |
} |
157 |
else if ((jflags & READ)) |
else if ((jflags & FILEDESCRIPTOR_FILEOPEN_FLAG_READ)) |
158 |
{ |
{ |
159 |
/* read */ |
/* read */ |
160 |
flags = TARGET_NATIVE_FILE_FILEFLAG_READ; |
flags = TARGET_NATIVE_FILE_FILEFLAG_READ; |
164 |
{ |
{ |
165 |
/* write */ |
/* write */ |
166 |
flags = TARGET_NATIVE_FILE_FILEFLAG_CREATE | TARGET_NATIVE_FILE_FILEFLAG_WRITE; |
flags = TARGET_NATIVE_FILE_FILEFLAG_CREATE | TARGET_NATIVE_FILE_FILEFLAG_WRITE; |
167 |
if ((jflags & APPEND)) |
if ((jflags & FILEDESCRIPTOR_FILEOPEN_FLAG_APPEND)) |
168 |
{ |
{ |
169 |
flags |= TARGET_NATIVE_FILE_FILEFLAG_APPEND; |
flags |= TARGET_NATIVE_FILE_FILEFLAG_APPEND; |
170 |
} |
} |
175 |
permissions = TARGET_NATIVE_FILE_FILEPERMISSION_NORMAL; |
permissions = TARGET_NATIVE_FILE_FILEPERMISSION_NORMAL; |
176 |
} |
} |
177 |
|
|
178 |
if ((jflags & SYNC)) |
if ((jflags & FILEDESCRIPTOR_FILEOPEN_FLAG_SYNC)) |
179 |
{ |
{ |
180 |
flags |= TARGET_NATIVE_FILE_FILEFLAG_SYNC; |
flags |= TARGET_NATIVE_FILE_FILEFLAG_SYNC; |
181 |
} |
} |
182 |
|
|
183 |
if ((jflags & DSYNC)) |
if ((jflags & FILEDESCRIPTOR_FILEOPEN_FLAG_DSYNC)) |
184 |
{ |
{ |
185 |
flags |= TARGET_NATIVE_FILE_FILEFLAG_DSYNC; |
flags |= TARGET_NATIVE_FILE_FILEFLAG_DSYNC; |
186 |
} |
} |
461 |
"Cannot represent position correctly on this system"); |
"Cannot represent position correctly on this system"); |
462 |
return(JNI_JLONG_CONST_MINUS_1); |
return(JNI_JLONG_CONST_MINUS_1); |
463 |
} |
} |
464 |
#endif |
#endif /* 0 */ |
465 |
|
|
466 |
if (stop_at_eof) |
if (stop_at_eof) |
467 |
{ |
{ |
476 |
} |
} |
477 |
|
|
478 |
/* set file read/write position (seek) */ |
/* set file read/write position (seek) */ |
479 |
if (whence == SET) |
if (whence == FILEDESCRIPTOR_FILESEEK_SET) |
480 |
{ |
{ |
481 |
if (TARGET_NATIVE_MATH_INT_INT64_GT(offset,file_size)) |
if (TARGET_NATIVE_MATH_INT_INT64_GT(offset,file_size)) |
482 |
offset = file_size; |
offset = file_size; |
483 |
} |
} |
484 |
else if (whence == CUR) |
else if (whence == FILEDESCRIPTOR_FILESEEK_CUR) |
485 |
{ |
{ |
486 |
TARGET_NATIVE_FILE_TELL(native_fd, current_offset, result); |
TARGET_NATIVE_FILE_TELL(native_fd, current_offset, result); |
487 |
if (result != TARGET_NATIVE_OK) |
if (result != TARGET_NATIVE_OK) |
494 |
if (TARGET_NATIVE_MATH_INT_INT64_GT(TARGET_NATIVE_MATH_INT_INT64_ADD(current_offset,offset),file_size)) |
if (TARGET_NATIVE_MATH_INT_INT64_GT(TARGET_NATIVE_MATH_INT_INT64_ADD(current_offset,offset),file_size)) |
495 |
{ |
{ |
496 |
offset = file_size; |
offset = file_size; |
497 |
whence = SET; |
whence = FILEDESCRIPTOR_FILESEEK_SET; |
498 |
} |
} |
499 |
} |
} |
500 |
else if (TARGET_NATIVE_MATH_INT_INT64_GT(offset,0)) /* Default to END case */ |
else if (TARGET_NATIVE_MATH_INT_INT64_GT(offset,0)) /* Default to END case */ |
506 |
/* Now do it */ |
/* Now do it */ |
507 |
result = TARGET_NATIVE_ERROR; |
result = TARGET_NATIVE_ERROR; |
508 |
new_offset = JNI_JLONG_CONST_MINUS_1; |
new_offset = JNI_JLONG_CONST_MINUS_1; |
509 |
if (whence == SET) |
if (whence == FILEDESCRIPTOR_FILESEEK_SET) |
510 |
TARGET_NATIVE_FILE_SEEK_BEGIN(native_fd, offset, new_offset, result); |
TARGET_NATIVE_FILE_SEEK_BEGIN(native_fd, offset, new_offset, result); |
511 |
if (whence == CUR) |
if (whence == FILEDESCRIPTOR_FILESEEK_CUR) |
512 |
TARGET_NATIVE_FILE_SEEK_CURRENT(native_fd, offset, new_offset, result); |
TARGET_NATIVE_FILE_SEEK_CURRENT(native_fd, offset, new_offset, result); |
513 |
if (whence == END) |
if (whence == FILEDESCRIPTOR_FILESEEK_END) |
514 |
TARGET_NATIVE_FILE_SEEK_END(native_fd, offset, new_offset, result); |
TARGET_NATIVE_FILE_SEEK_END(native_fd, offset, new_offset, result); |
515 |
|
|
516 |
if (result != TARGET_NATIVE_OK) |
if (result != TARGET_NATIVE_OK) |