/*
 * Copyright(C) 2000 Проект ИОК
 *
 * Этот файл содержит информацию, являющуюся
 * собственностью компании Крипто Про.
 *
 * Любая часть этого файла не может быть скопирована,
 * исправлена, переведена на другие языки,
 * локализована или модифицирована любым способом,
 * откомпилирована, передана по сети с или на
 * любую компьютерную систему без предварительного
 * заключения соглашения с компанией Крипто Про.
 */

/****
 * $Id: f12klen.c 206422 2020-02-10 13:50:43Z frolov $
 *
 * Работа со считывателями и ключевой информацией (READER).
 *
 * Библиотека чтения / записи ключевой информации на дискеты (FAT12).
 *
 * Функции чтения / записи ключевой информации с ключевой дискеты.
 * Функция получения длины файла.
 *
 * Функция: fat12_length
 ****/

#include "fat12prj.h" /*+ Project (READER/FAT12) include.
    Мастер include файл для проекта (READER/FAT12). +*/

/*++++
 * Функция получения длины файла.
 ++++*/
DWORD fat12_length(
    TSupSysContext *context, 
    TSupSysInfo *info )
{
    TReaderInfoLength *inf = (TReaderInfoLength*)info;
    TFat12Context *ctx = (TFat12Context*)context;
#ifndef UNIX
    BY_HANDLE_FILE_INFORMATION finfo;
#endif /* UNIX */

    SUPSYS_PRE_CONTEXT( context, TFat12Context );
    SUPSYS_PRE_INFO( info, TReaderInfoLength );

#ifdef UNIX
    if( fseek( ctx->handle, 0, SEEK_END ) )
	return fat12_os_error();
    *inf = (size_t)ftell( ctx->handle );
    if( *inf == (size_t)-1 )
	return fat12_os_error();
#else /* UNIX */
    if( !GetFileInformationByHandle( ctx->handle, &finfo ) )
	return fat12_os_error();
    *inf = (size_t)finfo.nFileSizeLow;
    if( finfo.nFileSizeHigh )
	*inf = (size_t)-1;
#endif /* UNIX */
    return ERROR_SUCCESS;
}

DWORD fat12_free_space(
    TSupSysContext *context,
    TSupSysInfo *info
) {
    size_t* free_space = (size_t*) info;
    SUPSYS_PRE_CONTEXT(context, TFat12Context);
    SUPSYS_PRE_INFO(info, size_t);
    *free_space = (size_t)-1;
    return ERROR_SUCCESS;
}
