...
|
...
|
@@ -1012,24 +1012,36 @@ cl_error_t prescan_cb(int fd, void *context) {
|
1012
|
1012
|
snprintf(tmpf, sizeof(tmpf), "%s\\%08x.tmp", tmpdir, ++tmpn);
|
1013
|
1013
|
tmpf[sizeof(tmpf)-1] = '\0';
|
1014
|
1014
|
fdhdl = CreateFile(tmpf, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE, NULL);
|
1015
|
|
- if(fdhdl != INVALID_HANDLE_VALUE) break;
|
1016
|
|
- /* FIXME: handle non dup filename errors */
|
|
1015
|
+ if(fdhdl != INVALID_HANDLE_VALUE) {
|
|
1016
|
+ logg("*prescan_cb: dumping content to tempfile %s (handle %p)\n", tmpf, fdhdl);
|
|
1017
|
+ break;
|
|
1018
|
+ }
|
|
1019
|
+ if((perf = GetLastError()) != ERROR_FILE_EXISTS) {
|
|
1020
|
+ logg("!prescan_cb: failed to create tempfile %s - error %u\n", tmpf, perf);
|
|
1021
|
+ return CL_CLEAN;
|
|
1022
|
+ }
|
1017
|
1023
|
}
|
1018
|
1024
|
|
1019
|
1025
|
fpos = lseek(fd, 0, SEEK_CUR);
|
1020
|
1026
|
lseek(fd, 0, SEEK_SET);
|
1021
|
1027
|
while((rsz = read(fd, tmpf, sizeof(tmpf))) > 0) {
|
1022
|
|
- int wsz = 0;
|
1023
|
|
- while(wsz != rsz) {
|
1024
|
|
- DWORD rwsz;
|
1025
|
|
- if(!WriteFile(fdhdl, &tmpf[wsz], rsz - wsz, &rwsz, NULL)) {
|
1026
|
|
- /* FIXME: handle write fail here */
|
1027
|
|
- }
|
1028
|
|
- wsz += rwsz;
|
|
1028
|
+ int wsz = 0;
|
|
1029
|
+ while(wsz != rsz) {
|
|
1030
|
+ DWORD rwsz;
|
|
1031
|
+ if(!WriteFile(fdhdl, &tmpf[wsz], rsz - wsz, &rwsz, NULL)) {
|
|
1032
|
+ logg("!prescan_cb: failed to write to tempfile %s - error %u\n", GetLastError());
|
|
1033
|
+ lseek(fd, fpos, SEEK_SET);
|
|
1034
|
+ CloseHandle(fdhdl);
|
|
1035
|
+ return CL_CLEAN;
|
1029
|
1036
|
}
|
|
1037
|
+ wsz += rwsz;
|
|
1038
|
+ }
|
1030
|
1039
|
}
|
1031
|
1040
|
if(rsz) {
|
1032
|
|
- /* FIXME: handle read fail here */
|
|
1041
|
+ logg("!prescan_cb: failed to read from clamav tempfile - errno = %d\n", errno);
|
|
1042
|
+ lseek(fd, fpos, SEEK_SET);
|
|
1043
|
+ CloseHandle(fdhdl);
|
|
1044
|
+ return CL_CLEAN;
|
1033
|
1045
|
}
|
1034
|
1046
|
lseek(fd, fpos, SEEK_SET);
|
1035
|
1047
|
SetFilePointer(fdhdl, 0, NULL, FILE_BEGIN);
|