/
| 841 | |
| 842 | /************************************************************/ |
| 843 | extern zipFile ZEXPORT zipOpen3(const void* pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def) |
| 844 | { |
| 845 | zip64_internal ziinit; |
| 846 | zip64_internal* zi; |
| 847 | int err = ZIP_OK; |
| 848 | |
| 849 | ziinit.z_filefunc.zseek32_file = NULL; |
| 850 | ziinit.z_filefunc.ztell32_file = NULL; |
| 851 | if (pzlib_filefunc64_32_def == NULL) |
| 852 | fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64); |
| 853 | else |
| 854 | ziinit.z_filefunc = *pzlib_filefunc64_32_def; |
| 855 | |
| 856 | ziinit.filestream = ZOPEN64(ziinit.z_filefunc, |
| 857 | pathname, |
| 858 | (append == APPEND_STATUS_CREATE) ? |
| 859 | (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) : |
| 860 | (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING)); |
| 861 | |
| 862 | if (ziinit.filestream == NULL) |
| 863 | return NULL; |
| 864 | |
| 865 | if (append == APPEND_STATUS_CREATEAFTER) |
| 866 | ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END); |
| 867 | |
| 868 | ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream); |
| 869 | ziinit.in_opened_file_inzip = 0; |
| 870 | ziinit.ci.stream_initialised = 0; |
| 871 | ziinit.number_entry = 0; |
| 872 | ziinit.add_position_when_writing_offset = 0; |
| 873 | init_linkedlist(&(ziinit.central_dir)); |
| 874 | |
| 875 | |
| 876 | zi = (zip64_internal*)ALLOC(sizeof(zip64_internal)); |
| 877 | if (zi == NULL) |
| 878 | { |
| 879 | ZCLOSE64(ziinit.z_filefunc,ziinit.filestream); |
| 880 | return NULL; |
| 881 | } |
| 882 | |
| 883 | /* now we add file in a zipfile */ |
| 884 | # ifndef NO_ADDFILEINEXISTINGZIP |
| 885 | ziinit.globalcomment = NULL; |
| 886 | if (append == APPEND_STATUS_ADDINZIP) |
| 887 | { |
| 888 | // Read and Cache Central Directory Records |
| 889 | err = LoadCentralDirectoryRecord(&ziinit); |
| 890 | } |
| 891 | |
| 892 | if (globalcomment) |
| 893 | { |
| 894 | *globalcomment = ziinit.globalcomment; |
| 895 | } |
| 896 | # endif /* !NO_ADDFILEINEXISTINGZIP*/ |
| 897 | |
| 898 | if (err != ZIP_OK) |
| 899 | { |
| 900 | # ifndef NO_ADDFILEINEXISTINGZIP |
no test coverage detected