IDA SDK

- Main Page
- Header Files
- Classes
- Modules

- File List
- File Members

Functions | Macros | Typedefs | Enumerations
fpro.h File Reference

## Detailed Description

System independent counterparts of FILE* related functions from Clib.

You should not use C standard I/O functions in your modules. The reason: Each module compiled with Borland (and statically linked to Borland's library) will host a copy of the FILE * information.

So, if you open a file in the plugin and pass the handle to the kernel, the kernel will not be able to use it.

If you really need to use the standard functions, define USE_STANDARD_FILE_FUNCTIONS. In this case do not mix them with q... functions.

## Functions
idaman THREAD_SAFE int ida_export | qrename (const char *oldfname, const char *newfname)
| Rename a file: 'newname' may exist, and will be deleted.
idaman THREAD_SAFE int ida_export | qmove (const char *oldfname, const char *newfname, uint32 flags)
idaman THREAD_SAFE int ida_export | qcopyfile (const char *from, const char *to, bool overwrite=true, bool(idaapi *cb)(size_t pos, size_t total, void *ud)=NULL, void *ud=NULL, int flags=0)
| Copy a file. More...
idaman char *ida_export | qtmpnam (char *buf, size_t bufsize)
| Get temporary file name. More...
File I/O
The following functions work just like their counterparts from Clib, only they are safer, system independent, and they set qerrno (see get_qerrno()).
idaman THREAD_SAFE FILE *ida_export | qfopen (const char *file, const char *mode)
idaman THREAD_SAFE int ida_export | qfread (FILE *fp, void *buf, size_t n)
idaman THREAD_SAFE int ida_export | qfwrite (FILE *fp, const void *buf, size_t n)
idaman THREAD_SAFE int32 ida_export | qftell (FILE *fp)
idaman THREAD_SAFE int ida_export | qfseek (FILE *fp, int32 offset, int whence)
idaman THREAD_SAFE int ida_export | qfclose (FILE *fp)
idaman THREAD_SAFE int ida_export | qflush (FILE *fp)
idaman THREAD_SAFE int ida_export | qfputc (int chr, FILE *fp)
idaman THREAD_SAFE int ida_export | qfgetc (FILE *fp)
idaman THREAD_SAFE char *ida_export | qfgets (char *s, size_t len, FILE *fp)
idaman THREAD_SAFE int ida_export | qfputs (const char *s, FILE *fp)
idaman FILE *ida_export | qtmpfile (void)
idaman THREAD_SAFE int ida_export | qunlink (const char *fname)
idaman THREAD_SAFE char *ida_export | qgets (char *line, size_t linesize)
idaman THREAD_SAFE int ida_export | qvfprintf (FILE *fp, const char *format, va_list va)
idaman THREAD_SAFE int ida_export | qvprintf (const char *format, va_list va)
idaman THREAD_SAFE int ida_export | qveprintf (const char *format, va_list va)
idaman THREAD_SAFE int ida_export | qvfscanf (FILE *fp, const char *format, va_list va)
THREAD_SAFE int | qfprintf (FILE *fp, const char *format,...)
THREAD_SAFE int | qprintf (const char *format,...)
THREAD_SAFE int | qeprintf (const char *format,...)
THREAD_SAFE int | qfscanf (FILE *fp, const char *format,...)
Large file support
The following functions work just like their counterparts, but support large files (>2Gb).
idaman THREAD_SAFE qoff64_t ida_export | qftell64 (FILE *fp)
idaman THREAD_SAFE int ida_export | qfseek64 (FILE *fp, qoff64_t offset, int whence)
idaman THREAD_SAFE int ida_export | qcopyfile64 (const char *from, const char *to, bool overwrite=true, bool(idaapi *cb)(uint64 pos, uint64 total, void *ud)=NULL, void *ud=NULL, int flags=0)

## readbytes/writebytes
  Add-ins for 2..32 byte read/writes. Parameters
  fp | pointer to file
  res | value read from file
  size | size of value in bytes (1..32)
  mostfirst | is MSB first? (0/1)
  Return values
  0 | All these functions return 0 on success
#define | DEF_FREADBYTES(read, write, type, size)
idaman THREAD_SAFE int ida_export | freadbytes (FILE *fp, void *res, int size, int mostfirst)
idaman THREAD_SAFE int ida_export | fwritebytes (FILE *fp, const void *l, int size, int mostfirst)
int | fread2bytes (FILE *fp, int16 *res, bool mostfirst)
int | fwrite2bytes (FILE *fp, const int16 *res, bool mostfirst)
int | fread2bytes (FILE *fp, uint16 *res, bool mostfirst)
int | fwrite2bytes (FILE *fp, const uint16 *res, bool mostfirst)
int | fread4bytes (FILE *fp, int32 *res, bool mostfirst)
int | fwrite4bytes (FILE *fp, const int32 *res, bool mostfirst)
int | fread4bytes (FILE *fp, uint32 *res, bool mostfirst)
int | fwrite4bytes (FILE *fp, const uint32 *res, bool mostfirst)
int | fread8bytes (FILE *fp, longlong *res, bool mostfirst)
int | fwrite8bytes (FILE *fp, const longlong *res, bool mostfirst)
int | fread8bytes (FILE *fp, ulonglong *res, bool mostfirst)
int | fwrite8bytes (FILE *fp, const ulonglong *res, bool mostfirst)

## Macros
#define | stdin dont_use_stdin
| use gets()
#define | stdout dont_use_stdout
| use qprintf()
#define | stderr dont_use_stderr
| use qeprintf()
#define | fopen dont_use_fopen
| use qfopen()
#define | fread dont_use_fread
| use qfread()
#define | fwrite dont_use_fwrite
| use qfwrite()
#define | ftell dont_use_ftell
| use qftell()
#define | fseek dont_use_fseek
| use qfseek()
#define | fclose dont_use_fclose
| use qfclose()
#define | fflush dont_use_fflush
| use qflush()
#define | fputc dont_use_fputc
| use qfputc()
#define | fgetc dont_use_fgetc
| use qfgetc()
#define | fgets dont_use_fgets
| use qfgets()
#define | fputs dont_use_fputs
| use qfputs()
#define | vfprintf dont_use_vfprintf
| use qvfprintf()
#define | vfscanf dont_use_vfscanf
| use qvfscanf()
#define | fprintf dont_use_fprintf
| use qfprintf()
#define | fscanf dont_use_fscanf
| use qfscanf()

## Typedefs
typedef janitor_t< FILE * > | file_janitor_t
| File janitor: will close a file upon deletion.

## Enumerations
enum | { QMOVE_CROSS_FS = 0x01, QMOVE_OVERWRITE = 0x02, QMOVE_OVR_RO = 0x04 }

## Macro Definition Documentation

#define DEF_FREADBYTES | ( |  | read,
|  |  | write,
|  |  | type,
|  |  | size
| ) |  |

Value:
inline int read(FILE *fp, type *res, bool mostfirst) \
{ return freadbytes(fp, res, size, mostfirst); } \
inline int write(FILE *fp, const type *res, bool mostfirst) \
{ return fwritebytes(fp, res, size, mostfirst); }

## Function Documentation

idaman THREAD_SAFE int ida_export qmove | ( | const char * | oldfname,
|  | const char * | newfname,
|  | uint32 | flags
| ) |  |

Return values

  else | a combination of flags to be given for successful move

idaman THREAD_SAFE int ida_export qcopyfile | ( | const char * | from,
|  | const char * | to,
|  | bool | overwrite = `true`,
|  | bool(idaapi *)(size_t pos, size_t total, void *ud) | cb = `NULL`,
|  | void * | ud = `NULL`,
|  | int | flags = `0`
| ) |  |

Copy a file.

Parameters

  from | source file name
  to | destination file name
  overwrite | overwrite output if it exists?
  cb | user callback. return false to abort the copy loop
  ud | user data passed back to cb
  flags | reserved (should be zero)

Return values

  -1 | input file not found
  -2 | output file not writable
  -3 | output file already exists while overwrite is false
  -4 | write failure
  -5 | interrupted from the callback

idaman char* ida_export qtmpnam | ( | char * | buf,
|  | size_t | bufsize
| ) |  |

Get temporary file name.

Returns absolute path, includes directory, and uses TEMP/TMP vars.