# FS_COMMAND_WRITEFILE

## C Specification

      FSResult FS_ARCHIVE_PROC_FUNC(
          FSFile          *p_file,
          FSCommandType   command /* = FS_COMMAND_WRITEFILE */);

## Description

Operating specifications for the archive command `FS_COMMAND_WRITEFILE` are shown below:

Arguments passed to this command
  This command takes (as a command argument) the variable `arg.readfile` that is stored in `p_file`.
  This variable is defined in `nitro/fs/file.h` as shown below:

      typedef struct
              {
                  const void  *src;
                  u32         len_org;
                  u32         len;
              } FSWriteFileInfo;

  Argument content is listed below:

  Arguments | Content
  --- | ---
  `src` | The memory address for the source data to be written to a file.
  `len_org` | Indicates the size of data to write (bytes), using the specified value as-is.
  `len` | Specifies the size of data to be written (bytes), using a value that is adjusted by the file size at the time that the command is called.

Actions required of this command
  `p_file` is a handle that always stores file information in `prop.file`. Based on `p_file`'s `prop.file` argument, the command makes the following settings:
  - Transfers `len` bytes of data from memory indicated by `src` to an archive offset position that is indicated by `prop.file.pos`.
  - Adds the value of `len` to `prop.file.pos`.
  Actually, the value `len` is adjusted from the specified value, taking `prop.file.bottom` into consideration. If you want to run a special process when a write exceeds the file size, you can use the original value that is stored in `len_org`.

Default Implementation
  Uses the archive write callback function to transfer `len` bytes from `src` to the base offset position indicated by `prop.file.pos`. It then adds `len` to `prop.file.pos`.

Command Results
  If `FS_RESULT_SUCCESS` is returned by the command, it means that the transfer process for `len` bytes completed properly. When anything else is returned by the command, it means that transfer failed due to some error.

Functions that use this command
  - `FS_WriteFile`
  - `FS_WriteFileAsync`

## See Also

`FSArchive`, `FS_ARCHIVE_PROC_FUNC`, `FS_COMMAND_*`, `FS_SetArchiveProc`

## Revision History

07/12/2004 Initial Version