IDA C++ SDK 9.2
Loading...
Searching...
No Matches
fpro.h
Go to the documentation of this file.
1/*
2 * Interactive disassembler (IDA).
3 * Copyright (c) 1990-2025 Hex-Rays
4 * ALL RIGHTS RESERVED.
5 *
6 */
7
8#ifndef __FPRO_H
9#define __FPRO_H
10
11#include <pro.h>
12#include <stdio.h>
13
29
30#if !defined(USE_STANDARD_FILE_FUNCTIONS) && !defined(__CODE_CHECKER__)
31#undef stdin
32#undef stdout
33#undef stderr
34#undef fgetc
35#undef fputc
36#define stdin dont_use_stdin
37#define stdout dont_use_stdout
38#define stderr dont_use_stderr
39#define fopen dont_use_fopen
40#define fread dont_use_fread
41#define fwrite dont_use_fwrite
42#define ftell dont_use_ftell
43#define fseek dont_use_fseek
44#define fclose dont_use_fclose
45#define fflush dont_use_fflush
46#define fputc dont_use_fputc
47#define fgetc dont_use_fgetc
48#define fgets dont_use_fgets
49#define fputs dont_use_fputs
50#define vfprintf dont_use_vfprintf
51#define vfscanf dont_use_vfscanf
52#define fprintf dont_use_fprintf
53#define fscanf dont_use_fscanf
54#endif
55
56
61idaman THREAD_SAFE FILE *ida_export qfopen(const char *file, const char *mode);
62idaman THREAD_SAFE ssize_t ida_export qfread(FILE *fp, void *buf, size_t n);
63idaman THREAD_SAFE ssize_t ida_export qfwrite(FILE *fp, const void *buf, size_t n);
64idaman THREAD_SAFE qoff64_t ida_export qftell(FILE *fp);
65idaman THREAD_SAFE int ida_export qfseek(FILE *fp, qoff64_t offset, int whence);
66idaman THREAD_SAFE int ida_export qfclose(FILE *fp);
67idaman THREAD_SAFE int ida_export qflush(FILE *fp);
68idaman THREAD_SAFE int ida_export qfputc(int chr, FILE *fp);
69idaman THREAD_SAFE int ida_export qfgetc(FILE *fp);
70idaman THREAD_SAFE char *ida_export qfgets(char *s, size_t len, FILE *fp);
71idaman THREAD_SAFE int ida_export qfputs(const char *s, FILE *fp);
72idaman FILE *ida_export qtmpfile(void);
73idaman THREAD_SAFE int ida_export qunlink(const char *fname);
74idaman THREAD_SAFE int ida_export qaccess(const char *fname, int mode);
75idaman THREAD_SAFE char *ida_export qgets(char *line, size_t linesize);
76idaman THREAD_SAFE uint64 ida_export qfsize(FILE *fp);
77
78idaman THREAD_SAFE AS_PRINTF(2, 0) int ida_export qvfprintf(FILE *fp, const char *format, va_list va);
79idaman THREAD_SAFE AS_PRINTF(1, 0) int ida_export qvprintf(const char *format, va_list va);
80idaman THREAD_SAFE AS_PRINTF(1, 0) int ida_export qveprintf(const char *format, va_list va);
81idaman THREAD_SAFE AS_SCANF(2, 0) int ida_export qvfscanf(FILE *fp, const char *format, va_list va);
82
83#ifdef __cplusplus
84THREAD_SAFE AS_PRINTF(2, 3) inline int qfprintf(FILE *fp, const char *format, ...)
85{
86 va_list va;
88 int code = qvfprintf(fp, format, va);
90 return code;
91}
92
93THREAD_SAFE AS_PRINTF(1, 2) inline int qprintf(const char *format, ...)
94{
95 va_list va;
97 int code = qvprintf(format, va);
98 va_end(va);
99 return code;
100}
101
102THREAD_SAFE AS_PRINTF(1, 2) inline int qeprintf(const char *format, ...)
103{
104 va_list va;
106 int code = qveprintf(format, va);
107 va_end(va);
108 return code;
109}
110
111THREAD_SAFE AS_SCANF(2, 3) inline int qfscanf(FILE *fp, const char *format, ...)
112{
113 va_list va;
115 int code = qvfscanf(fp, format, va);
116 va_end(va);
117 return code;
118}
119#endif
121
122
127
128idaman THREAD_SAFE ssize_t ida_export qgetline(qstring *buf, FILE *fp);
129
131
132idaman THREAD_SAFE int ida_export qrename(const char *oldfname, const char *newfname);
133
138idaman THREAD_SAFE int ida_export qmove(const char *oldfname, const char *newfname, uint32 flags);
139enum
140{
141 QMOVE_CROSS_FS = 0x01, // UNIX: allow moving between different filesystem
142 QMOVE_OVERWRITE = 0x02, // Overwrite existing file
143 QMOVE_OVR_RO = 0x04, // Overwrite file even if it is write-protected
144};
145
158
159idaman THREAD_SAFE int ida_export qcopyfile(
160 const char *from,
161 const char *to,
162 bool overwrite = true,
163 bool (idaapi *cb)(uint64 pos, uint64 total, void *ud)=nullptr,
164 void *ud = nullptr,
165 int flags = 0);
166
167
170
171idaman char *ida_export qtmpdir(char *buf, size_t bufsize);
172
175
176idaman char *ida_export qtmpnam(char *buf, size_t bufsize);
177
178
181template <> inline file_janitor_t::~janitor_t()
182{
184}
185
194idaman THREAD_SAFE int ida_export freadbytes(FILE *fp, void *res, int size, int mostfirst);
195idaman THREAD_SAFE int ida_export fwritebytes(FILE *fp, const void *l, int size, int mostfirst);
196
197#ifdef __cplusplus
198#define DEF_FREADBYTES(read, write, type, size) \
199 inline THREAD_SAFE int read(FILE *fp, type *res, bool mostfirst) \
200 { return freadbytes(fp, res, size, mostfirst); } \
201 inline THREAD_SAFE int write(FILE *fp, const type *res, bool mostfirst) \
202 { return fwritebytes(fp, res, size, mostfirst); }
209#else
210#define fread2bytes(fp,v,mf) freadbytes(fp,v,2,mf)
211#define fwrite2bytes(fp,v,mf) fwritebytes(fp,v,2,mf)
212#define fread4bytes(fp,v,mf) freadbytes(fp,v,4,mf)
213#define fwrite4bytes(fp,v,mf) fwritebytes(fp,v,4,mf)
214#define fread8bytes(fp,v,mf) freadbytes(fp,v,8,mf)
215#define fwrite8bytes(fp,v,mf) fwritebytes(fp,v,8,mf)
216#endif
218
219#if !defined(feof) || !defined(ferror)
220// If feof() and ferror() are not macros, we cannot use them
221// Fortunately, for borland and vc they are macros, so there is no problem
222// GCC defines them as functions: I have no idea whether they will work or not
223// Anyway we remove the error directive from this file
224// so the plugins can be compiled with gcc
225//#error feof or ferror are not macros!
226#endif
227
228
229#endif
idaman char *ida_export qtmpdir(char *buf, size_t bufsize)
Get temporary directory name Returns absolute path.
DEF_FREADBYTES(fread2bytes, fwrite2bytes, int16, 2) DEF_FREADBYTES(fread2bytes
fwrite8bytes
Definition fpro.h:208
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 qcopyfile(const char *from, const char *to, bool overwrite=true, bool(idaapi *cb)(uint64 pos, uint64 total, void *ud)=nullptr, void *ud=nullptr, int flags=0)
Copy a file.
idaman THREAD_SAFE ssize_t ida_export qgetline(qstring *buf, FILE *fp)
Read line from file (the newline is removed from the output buffer)
idaman char *ida_export qtmpnam(char *buf, size_t bufsize)
Get temporary file name.
idaman THREAD_SAFE int ida_export fwritebytes(FILE *fp, const void *l, int size, int mostfirst)
fwrite4bytes
Definition fpro.h:206
idaman THREAD_SAFE int ida_export qmove(const char *oldfname, const char *newfname, uint32 flags)
Move a file - more powerful version of qrename.
@ QMOVE_CROSS_FS
Definition fpro.h:141
@ QMOVE_OVR_RO
Definition fpro.h:143
@ QMOVE_OVERWRITE
Definition fpro.h:142
fwrite2bytes
Definition fpro.h:204
idaman THREAD_SAFE int ida_export freadbytes(FILE *fp, void *res, int size, int mostfirst)
janitor_t< FILE * > file_janitor_t
File janitor: will close a file at destruction-time.
Definition fpro.h:180
idaman THREAD_SAFE va_list va
See qsscanf()
Definition err.h:21
idaman THREAD_SAFE AS_SCANF(2, 0) int ida_export qvfscanf(FILE *fp
idaman THREAD_SAFE ssize_t ida_export qfwrite(FILE *fp, const void *buf, size_t n)
va_end(va)
idaman THREAD_SAFE char *ida_export qfgets(char *s, size_t len, FILE *fp)
idaman THREAD_SAFE qoff64_t ida_export qftell(FILE *fp)
idaman THREAD_SAFE uint64 ida_export qfsize(FILE *fp)
idaman THREAD_SAFE AS_PRINTF(2, 0) int ida_export qvfprintf(FILE *fp
idaman FILE *ida_export qtmpfile(void)
idaman THREAD_SAFE const char * format
Definition fpro.h:78
idaman THREAD_SAFE int ida_export qaccess(const char *fname, int mode)
idaman THREAD_SAFE AS_PRINTF(1, 0) void ida_export vqperror(const char *format
Print error message to stderr (analog of perror)
idaman THREAD_SAFE int ida_export qflush(FILE *fp)
idaman THREAD_SAFE int ida_export qfseek(FILE *fp, qoff64_t offset, int whence)
idaman THREAD_SAFE int ida_export qfputc(int chr, FILE *fp)
THREAD_SAFE const char va_start(va, format)
idaman THREAD_SAFE ssize_t ida_export qfread(FILE *fp, void *buf, size_t n)
idaman THREAD_SAFE char *ida_export qgets(char *line, size_t linesize)
idaman THREAD_SAFE int ida_export qfclose(FILE *fp)
idaman THREAD_SAFE FILE *ida_export qfopen(const char *file, const char *mode)
idaman THREAD_SAFE int ida_export qunlink(const char *fname)
int code
Definition fpro.h:88
idaman size_t n
Definition pro.h:997
idaman THREAD_SAFE int ida_export qfputs(const char *s, FILE *fp)
idaman THREAD_SAFE int ida_export qfgetc(FILE *fp)
idaman int64 pos
Definition kernwin.hpp:1365
idaman size_t len
Definition kernwin.hpp:1356
asize_t size
Definition kernwin.hpp:6339
unsigned __int64 uint64
Definition llong.hpp:13
__int64 int64
Definition llong.hpp:14
This is the first header included in the IDA project.
unsigned short uint16
unsigned 16 bit value
Definition pro.h:346
unsigned int uint32
unsigned 32 bit value
Definition pro.h:348
short int16
signed 16 bit value
Definition pro.h:345
int int32
signed 32 bit value
Definition pro.h:347
idaman size_t bufsize
Definition pro.h:600
ptrdiff_t ssize_t
Signed size_t - used to check for size overflows when the counter becomes negative.
Definition pro.h:381
_qstring< char > qstring
regular string
Definition pro.h:3694
Resource janitor to facilitate use of the RAII idiom.
Definition pro.h:4486
FILE *& resource
Definition pro.h:4491
~janitor_t()
Definition fpro.h:181