| 943 | } |
| 944 | |
| 945 | int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local) |
| 946 | { |
| 947 | /* write the local header */ |
| 948 | int err; |
| 949 | uInt size_filename = (uInt)strlen(filename); |
| 950 | uInt size_extrafield = size_extrafield_local; |
| 951 | |
| 952 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)LOCALHEADERMAGIC, 4); |
| 953 | |
| 954 | if (err == ZIP_OK) |
| 955 | { |
| 956 | if (zi->ci.zip64) |
| 957 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)45, 2);/* version needed to extract */ |
| 958 | else |
| 959 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)20, 2);/* version needed to extract */ |
| 960 | } |
| 961 | |
| 962 | if (err == ZIP_OK) |
| 963 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)zi->ci.flag, 2); |
| 964 | |
| 965 | if (err == ZIP_OK) |
| 966 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)zi->ci.method, 2); |
| 967 | |
| 968 | if (err == ZIP_OK) |
| 969 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)zi->ci.dosDate, 4); |
| 970 | |
| 971 | // CRC / Compressed size / Uncompressed size will be filled in later and rewritten later |
| 972 | if (err == ZIP_OK) |
| 973 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)0, 4); /* crc 32, unknown */ |
| 974 | if (err == ZIP_OK) |
| 975 | { |
| 976 | if (zi->ci.zip64) |
| 977 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)0xFFFFFFFF, 4); /* compressed size, unknown */ |
| 978 | else |
| 979 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)0, 4); /* compressed size, unknown */ |
| 980 | } |
| 981 | if (err == ZIP_OK) |
| 982 | { |
| 983 | if (zi->ci.zip64) |
| 984 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)0xFFFFFFFF, 4); /* uncompressed size, unknown */ |
| 985 | else |
| 986 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)0, 4); /* uncompressed size, unknown */ |
| 987 | } |
| 988 | |
| 989 | if (err == ZIP_OK) |
| 990 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)size_filename, 2); |
| 991 | |
| 992 | if (zi->ci.zip64) |
| 993 | { |
| 994 | size_extrafield += 20; |
| 995 | } |
| 996 | |
| 997 | if (err == ZIP_OK) |
| 998 | err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (uLong)size_extrafield, 2); |
| 999 | |
| 1000 | if ((err == ZIP_OK) && (size_filename > 0)) |
| 1001 | { |
| 1002 | if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename) != size_filename) |
no test coverage detected