Lines Matching defs:psf
77 static void psf_log_syserr (SF_PRIVATE *psf, int error) ;
80 psf_copy_filename (SF_PRIVATE *psf, const char *path)
84 if (strlen (path) > 1 && strlen (path) - 1 >= sizeof (psf->file.path))
85 { psf->error = SFE_FILENAME_TOO_LONG ;
86 return psf->error ;
89 snprintf (psf->file.path, sizeof (psf->file.path), "%s", path) ;
95 snprintf (psf->file.name, sizeof (psf->file.name), "%s", ccptr) ;
98 snprintf (psf->file.dir, sizeof (psf->file.dir), "%s", path) ;
99 if ((cptr = strrchr (psf->file.dir, '/')) || (cptr = strrchr (psf->file.dir, '\\')))
102 psf->file.dir [0] = 0 ;
118 psf_fopen (SF_PRIVATE *psf)
120 psf->error = 0 ;
121 psf->file.filedes = psf_open_fd (&psf->file) ;
123 if (psf->file.filedes == - SFE_BAD_OPEN_MODE)
124 { psf->error = SFE_BAD_OPEN_MODE ;
125 psf->file.filedes = -1 ;
126 return psf->error ;
129 if (psf->file.filedes == -1)
130 psf_log_syserr (psf, errno) ;
132 return psf->error ;
136 psf_fclose (SF_PRIVATE *psf)
139 if (psf->virtual_io)
142 if (psf->file.do_not_close_descriptor)
143 { psf->file.filedes = -1 ;
147 if ((retval = psf_close_fd (psf->file.filedes)) == -1)
148 psf_log_syserr (psf, errno) ;
150 psf->file.filedes = -1 ;
156 psf_open_rsrc (SF_PRIVATE *psf)
159 if (psf->rsrc.filedes > 0)
163 count = snprintf (psf->rsrc.path, sizeof (psf->rsrc.path), "%s/..namedfork/rsrc", psf->file.path) ;
164 psf->error = SFE_NO_ERROR ;
165 if (count < sizeof (psf->rsrc.path))
166 { if ((psf->rsrc.filedes = psf_open_fd (&psf->rsrc)) >= 0)
167 { psf->rsrclength = psf_get_filelen_fd (psf->rsrc.filedes) ;
168 if (psf->rsrclength > 0 || (psf->rsrc.mode & SFM_WRITE))
170 psf_close_fd (psf->rsrc.filedes) ;
171 psf->rsrc.filedes = -1 ;
174 if (psf->rsrc.filedes == - SFE_BAD_OPEN_MODE)
175 { psf->error = SFE_BAD_OPEN_MODE ;
176 return psf->error ;
184 count = snprintf (psf->rsrc.path, sizeof (psf->rsrc.path), "%s._%s", psf->file.dir, psf->file.name) ;
185 psf->error = SFE_NO_ERROR ;
186 if (count < sizeof (psf->rsrc.path) && (psf->rsrc.filedes = psf_open_fd (&psf->rsrc)) >= 0)
187 { psf->rsrclength = psf_get_filelen_fd (psf->rsrc.filedes) ;
195 count = snprintf (psf->rsrc.path, sizeof (psf->rsrc.path), "%s.AppleDouble/%s", psf->file.dir, psf->file.name) ;
196 psf->error = SFE_NO_ERROR ;
197 if (count < sizeof (psf->rsrc.path))
198 { if ((psf->rsrc.filedes = psf_open_fd (&psf->rsrc)) >= 0)
199 { psf->rsrclength = psf_get_filelen_fd (psf->rsrc.filedes) ;
204 if (psf->rsrc.filedes == -1)
205 psf_log_syserr (psf, errno) ;
208 { psf->error = SFE_OPEN_FAILED ;
211 psf->rsrc.filedes = -1 ;
213 return psf->error ;
217 psf_get_filelen (SF_PRIVATE *psf)
220 if (psf->virtual_io)
221 return psf->vio.get_filelen (psf->vio_user_data) ;
223 filelen = psf_get_filelen_fd (psf->file.filedes) ;
226 { psf_log_syserr (psf, errno) ;
231 { psf->error = SFE_BAD_STAT_SIZE ;
235 switch (psf->file.mode)
237 filelen = filelen - psf->fileoffset ;
241 if (psf->fileoffset > 0 && psf->filelength > 0)
242 filelen = psf->filelength ;
248 ** subtract psf->fileoffset. We already have the answer we
262 psf_close_rsrc (SF_PRIVATE *psf)
263 { psf_close_fd (psf->rsrc.filedes) ;
264 psf->rsrc.filedes = -1 ;
269 psf_set_stdio (SF_PRIVATE *psf)
272 switch (psf->file.mode)
278 psf->file.filedes = 0 ;
282 psf->file.filedes = 1 ;
289 psf->filelength = 0 ;
295 psf_set_file (SF_PRIVATE *psf, int fd)
296 { psf->file.filedes = fd ;
300 psf_file_valid (SF_PRIVATE *psf)
301 { return (psf->file.filedes >= 0) ? SF_TRUE : SF_FALSE ;
305 psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence)
308 if (psf->virtual_io)
309 return psf->vio.seek (offset, whence, psf->vio_user_data) ;
312 if (psf->is_pipe)
313 { if (whence != SEEK_SET || offset != psf->pipeoffset)
314 psf_log_printf (psf, "psf_fseek : pipe seek to value other than pipeoffset\n") ;
320 offset += psf->fileoffset ;
331 psf_log_printf (psf, "psf_fseek : whence is %d *****.\n", whence) ;
335 absolute_position = lseek (psf->file.filedes, offset, whence) ;
338 psf_log_syserr (psf, errno) ;
340 return absolute_position - psf->fileoffset ;
344 psf_fread (void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
348 if (psf->virtual_io)
349 return psf->vio.read (ptr, bytes*items, psf->vio_user_data) / bytes ;
361 count = read (psf->file.filedes, ((char*) ptr) + total, (size_t) count) ;
367 psf_log_syserr (psf, errno) ;
378 if (psf->is_pipe)
379 psf->pipeoffset += total ;
385 psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
392 if (psf->virtual_io)
393 return psf->vio.write (ptr, bytes*items, psf->vio_user_data) / bytes ;
405 count = write (psf->file.filedes, ((const char*) ptr) + total, count) ;
411 psf_log_syserr (psf, errno) ;
422 if (psf->is_pipe)
423 psf->pipeoffset += total ;
429 psf_ftell (SF_PRIVATE *psf)
432 if (psf->virtual_io)
433 return psf->vio.tell (psf->vio_user_data) ;
435 if (psf->is_pipe)
436 return psf->pipeoffset ;
438 pos = lseek (psf->file.filedes, 0, SEEK_CUR) ;
441 { psf_log_syserr (psf, errno) ;
445 return pos - psf->fileoffset ;
462 psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf)
467 { count = read (psf->file.filedes, &(buffer [k]), 1) ;
473 psf_log_syserr (psf, errno) ;
487 psf_is_pipe (SF_PRIVATE *psf)
490 if (psf->virtual_io)
493 if (fstat (psf->file.filedes, &statbuf) == -1)
494 { psf_log_syserr (psf, errno) ;
526 psf_ftruncate (SF_PRIVATE *psf, sf_count_t len)
536 retval = ftruncate (psf->file.filedes, len) ;
539 psf_log_syserr (psf, errno) ;
545 psf_init_files (SF_PRIVATE *psf)
546 { psf->file.filedes = -1 ;
547 psf->rsrc.filedes = -1 ;
548 psf->file.savedes = -1 ;
552 psf_use_rsrc (SF_PRIVATE *psf, int on_off)
555 { if (psf->file.filedes != psf->rsrc.filedes)
556 { psf->file.savedes = psf->file.filedes ;
557 psf->file.filedes = psf->rsrc.filedes ;
560 else if (psf->file.filedes == psf->rsrc.filedes)
561 psf->file.filedes = psf->file.savedes ;
611 psf_log_syserr (SF_PRIVATE *psf, int error)
614 if (psf->error == 0)
615 { psf->error = SFE_SYSTEM ;
616 snprintf (psf->syserr, sizeof (psf->syserr), "System error : %s.", strerror (error)) ;
623 psf_fsync (SF_PRIVATE *psf)
626 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
627 fsync (psf->file.filedes) ;
629 psf = NULL ;
646 psf_fopen (SF_PRIVATE *psf)
648 psf->error = 0 ;
649 psf->file.handle = psf_open_handle (&psf->file) ;
651 if (psf->file.handle == INVALID_HANDLE_VALUE)
652 psf_log_syserr (psf, GetLastError ()) ;
654 return psf->error ;
658 psf_fclose (SF_PRIVATE *psf)
661 if (psf->virtual_io)
664 if (psf->file.do_not_close_descriptor)
665 { psf->file.handle = INVALID_HANDLE_VALUE ;
669 if ((retval = psf_close_handle (psf->file.handle)) == -1)
670 psf_log_syserr (psf, GetLastError ()) ;
672 psf->file.handle = INVALID_HANDLE_VALUE ;
678 psf_open_rsrc (SF_PRIVATE *psf)
680 if (psf->rsrc.handle != INVALID_HANDLE_VALUE)
684 snprintf (psf->rsrc.path, sizeof (psf->rsrc.path), "%s/rsrc", psf->file.path) ;
685 psf->error = SFE_NO_ERROR ;
686 if ((psf->rsrc.handle = psf_open_handle (&psf->rsrc)) != INVALID_HANDLE_VALUE)
687 { psf->rsrclength = psf_get_filelen_handle (psf->rsrc.handle) ;
695 snprintf (psf->rsrc.path, sizeof (psf->rsrc.path), "%s._%s", psf->file.dir, psf->file.name) ;
696 psf->error = SFE_NO_ERROR ;
697 if ((psf->rsrc.handle = psf_open_handle (&psf->rsrc)) != INVALID_HANDLE_VALUE)
698 { psf->rsrclength = psf_get_filelen_handle (psf->rsrc.handle) ;
706 snprintf (psf->rsrc.path, sizeof (psf->rsrc.path), "%s.AppleDouble/%s", psf->file.dir, psf->file.name) ;
707 psf->error = SFE_NO_ERROR ;
708 if ((psf->rsrc.handle = psf_open_handle (&psf->rsrc)) != INVALID_HANDLE_VALUE)
709 { psf->rsrclength = psf_get_filelen_handle (psf->rsrc.handle) ;
714 if (psf->rsrc.handle == INVALID_HANDLE_VALUE)
715 psf_log_syserr (psf, GetLastError ()) ;
717 return psf->error ;
721 psf_get_filelen (SF_PRIVATE *psf)
724 if (psf->virtual_io)
725 return psf->vio.get_filelen (psf->vio_user_data) ;
727 filelen = psf_get_filelen_handle (psf->file.handle) ;
730 { psf_log_syserr (psf, errno) ;
735 { psf->error = SFE_BAD_STAT_SIZE ;
739 switch (psf->file.mode)
741 filelen = filelen - psf->fileoffset ;
745 if (psf->fileoffset > 0 && psf->filelength > 0)
746 filelen = psf->filelength ;
752 ** subtract psf->fileoffset. We already have the answer we
766 psf_init_files (SF_PRIVATE *psf)
767 { psf->file.handle = INVALID_HANDLE_VALUE ;
768 psf->rsrc.handle = INVALID_HANDLE_VALUE ;
769 psf->file.hsaved = INVALID_HANDLE_VALUE ;
773 psf_use_rsrc (SF_PRIVATE *psf, int on_off)
776 { if (psf->file.handle != psf->rsrc.handle)
777 { psf->file.hsaved = psf->file.handle ;
778 psf->file.handle = psf->rsrc.handle ;
781 else if (psf->file.handle == psf->rsrc.handle)
782 psf->file.handle = psf->file.hsaved ;
852 psf_log_syserr (SF_PRIVATE *psf, int error)
856 if (psf->error == 0)
857 { psf->error = SFE_SYSTEM ;
869 snprintf (psf->syserr, sizeof (psf->syserr), "System error : %s", (char*) lpMsgBuf) ;
878 psf_close_rsrc (SF_PRIVATE *psf)
879 { psf_close_handle (psf->rsrc.handle) ;
880 psf->rsrc.handle = INVALID_HANDLE_VALUE ;
886 psf_set_stdio (SF_PRIVATE *psf)
890 switch (psf->file.mode)
897 psf->file.do_not_close_descriptor = 1 ;
902 psf->file.do_not_close_descriptor = 1 ;
910 psf->file.handle = handle ;
911 psf->filelength = 0 ;
917 psf_set_file (SF_PRIVATE *psf, int fd)
924 psf->file.handle = handle ;
928 psf_file_valid (SF_PRIVATE *psf)
929 { if (psf->file.handle == INVALID_HANDLE_VALUE)
935 psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence)
942 if (psf->virtual_io)
943 return psf->vio.seek (offset, whence, psf->vio_user_data) ;
947 offset += psf->fileoffset ;
962 fResult = SetFilePointerEx (psf->file.handle, liDistanceToMove, &liNewFilePointer, dwMoveMethod) ;
970 { psf_log_syserr (psf, dwError) ;
974 new_position = liNewFilePointer.QuadPart - psf->fileoffset ;
980 psf_fread (void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
985 if (psf->virtual_io)
986 return psf->vio.read (ptr, bytes*items, psf->vio_user_data) / bytes ;
998 if (ReadFile (psf->file.handle, ((char*) ptr) + total, count, &dwNumberOfBytesRead, 0) == 0)
999 { psf_log_syserr (psf, GetLastError ()) ;
1012 if (psf->is_pipe)
1013 psf->pipeoffset += total ;
1019 psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
1024 if (psf->virtual_io)
1025 return psf->vio.write (ptr, bytes * items, psf->vio_user_data) / bytes ;
1037 if (WriteFile (psf->file.handle, ((const char*) ptr) + total, count, &dwNumberOfBytesWritten, 0) == 0)
1038 { psf_log_syserr (psf, GetLastError ()) ;
1051 if (psf->is_pipe)
1052 psf->pipeoffset += total ;
1058 psf_ftell (SF_PRIVATE *psf)
1064 if (psf->virtual_io)
1065 return psf->vio.tell (psf->vio_user_data) ;
1067 if (psf->is_pipe)
1068 return psf->pipeoffset ;
1072 fResult = SetFilePointerEx (psf->file.handle, liDistanceToMove, &liNewFilePointer, FILE_CURRENT) ;
1080 { psf_log_syserr (psf, dwError) ;
1086 return pos - psf->fileoffset ;
1101 psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf)
1107 { if (ReadFile (psf->file.handle, &(buffer [k]), 1, &dwNumberOfBytesRead, 0) == 0)
1108 { psf_log_syserr (psf, GetLastError ()) ;
1125 psf_is_pipe (SF_PRIVATE *psf)
1127 if (psf->virtual_io)
1130 if (GetFileType (psf->file.handle) == FILE_TYPE_DISK)
1158 psf_fsync (SF_PRIVATE *psf)
1159 { FlushFileBuffers (psf->file.handle) ;
1164 psf_ftruncate (SF_PRIVATE *psf, sf_count_t len)
1181 fResult = SetFilePointerEx (psf->file.handle, liDistanceToMove, NULL, FILE_BEGIN) ;
1188 psf_log_syserr (psf, dwError) ;
1196 if (SetEndOfFile (psf->file.handle) == 0)
1198 psf_log_syserr (psf, GetLastError ()) ;