4 * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
8 * Jaewon Lim <jaewon81.lim@samsung.com>
9 * Woojin Jung <woojin2.jung@samsung.com>
10 * Juyoung Kim <j0.kim@samsung.com>
11 * Anastasia Lyupa <a.lyupa@samsung.com>
13 * This library is free software; you can redistribute it and/or modify it under
14 * the terms of the GNU Lesser General Public License as published by the
15 * Free Software Foundation; either version 2.1 of the License, or (at your option)
18 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
19 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
21 * License for more details.
23 * You should have received a copy of the GNU Lesser General Public License
24 * along with this library; if not, write to the Free Software Foundation, Inc., 51
25 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29 * - Samsung RnD Institute Russia
40 #include "probeinfo.h"
47 static enum DaOptions _sopt = OPT_FILE;
49 FILE* fopen(const char* filename, const char* mode)
51 static FILE* (*fopenp)(const char* filename, const char* mode);
54 BEFORE_ORIGINAL_FILE_NOFILTER(fopen, LIBC);
55 _filepath = (char*)filename;
57 fret = fopenp(filename, mode);
59 AFTER_PACK_ORIGINAL_FILEP(fret, 0, fret, FD_API_OPEN, "ss", filename, mode);
64 FILE* freopen(const char * filename, const char * mode, FILE * stream)
66 static FILE* (*freopenp)(const char * filename, const char * mode, FILE * stream);
69 BEFORE_ORIGINAL_FILE_NOFILTER(freopen, LIBC);
70 _filepath = (char*)filename;
72 fret = freopenp(filename, mode, stream);
74 AFTER_PACK_ORIGINAL_FILEP(fret, 0, fret, FD_API_OPEN, "ssp", filename, mode, stream);
79 FILE* fdopen(int fildes, const char *mode)
81 static FILE* (*fdopenp)(int fildes, const char *mode);
84 BEFORE_ORIGINAL_FILE_NOFILTER(fdopen, LIBC);
86 fret = fdopenp(fildes, mode);
88 AFTER_PACK_ORIGINAL_FILEP(fret, 0, fret, FD_API_OPEN, "ds", fildes, mode);
93 int fflush(FILE* stream)
95 static int (*fflushp)(FILE* stream);
97 BEFORE_ORIGINAL_FILE(fflush, LIBC);
98 ret = fflushp(stream);
99 AFTER_PACK_ORIGINAL_FILEP(ret, 0, stream, FD_API_OTHER, "p", stream);
103 int fclose(FILE* stream)
105 static int (*fclosep)(FILE* stream);
108 GET_REAL_FUNC(fclose, LIBC);
111 PRE_PROBEBLOCK_BEGIN();
112 GET_FD_FROM_FILEP(stream);
114 _fstatret = fstat(_fd, &_statbuf);
116 PRE_PROBEBLOCK_END();
118 ret = fclosep(stream);
120 POST_PACK_PROBEBLOCK_BEGIN();
122 PACK_COMMON_BEGIN(MSG_PROBE_RESOURCE, LC_RESOURCE, "p", stream);
123 PACK_COMMON_END(ret, newerrno, blockresult);
124 POST_PACK_PROBEBLOCK_MIDDLE_FD(0, _fd, FD_API_CLOSE);
125 POST_PACK_PROBEBLOCK_END();
130 int remove(const char* filename)
132 static int (*removep)(const char* filename);
134 BEFORE_ORIGINAL_FILE(remove, LIBC);
135 _filepath = (char*)filename;
136 ret = removep(filename);
137 AFTER_PACK_ORIGINAL_NOFD(ret, 0, FD_API_DIRECTORY, "s", filename);
141 int rename(const char* oldname, const char* newname)
143 static int (*renamep)(const char* oldname, const char* newname);
145 BEFORE_ORIGINAL_FILE(rename, LIBC);
146 _filepath = (char*)newname;
147 ret = renamep(oldname, newname);
148 AFTER_PACK_ORIGINAL_NOFD(ret, 0, FD_API_DIRECTORY, "ss", oldname, newname);
152 FILE * tmpfile ( void )
154 static FILE* (*tmpfilep) ( void );
157 BEFORE_ORIGINAL_FILE_NOFILTER(tmpfile, LIBC);
158 _filepath = "<temp file>";
160 AFTER_PACK_ORIGINAL_FILEP(fret, 0, fret, FD_API_OPEN, "s", "");
164 int fgetpos(FILE* stream, fpos_t* position)
166 static int (*fgetposp)(FILE* stream, fpos_t* position);
168 BEFORE_ORIGINAL_FILE(fgetpos, LIBC);
169 ret = fgetposp(stream, position);
170 AFTER_PACK_ORIGINAL_FILEP(ret, 0, stream, FD_API_OTHER, "pp", stream, position);
174 int fseek(FILE* stream, long int offset, int origin)
176 static int (*fseekp)(FILE* stream, long int offset, int origin);
178 BEFORE_ORIGINAL_FILE(fseek, LIBC);
179 ret = fseekp(stream, offset, origin);
180 AFTER_PACK_ORIGINAL_FILEP(ret, (unsigned int)offset, stream, FD_API_OTHER,
181 "pxd", stream, offset, origin);
185 int fsetpos(FILE* stream, const fpos_t* pos)
187 static int (*fsetposp)(FILE* stream, const fpos_t* pos);
189 BEFORE_ORIGINAL_FILE(fsetpos, LIBC);
190 ret = fsetposp(stream, pos);
191 AFTER_PACK_ORIGINAL_FILEP(ret, 0, stream, FD_API_OTHER, "pp", stream, pos);
195 long int ftell(FILE* stream)
197 static long int (*ftellp)(FILE* stream);
200 BEFORE_ORIGINAL_FILE(ftell, LIBC);
202 lret = ftellp(stream);
204 AFTER_PACK_ORIGINAL_FILEP(lret, 0, stream, FD_API_OTHER, "p", stream);
209 void rewind(FILE* stream)
211 static void (*rewindp)(FILE* stream);
213 BEFORE_ORIGINAL_FILE(rewind, LIBC);
217 AFTER_PACK_ORIGINAL_FILEP(0, 0, stream, FD_API_OTHER, "p", stream);
220 void clearerr(FILE* stream)
222 static void (*clearerrp)(FILE* stream);
224 BEFORE_ORIGINAL_FILE(clearerr, LIBC);
228 AFTER_PACK_ORIGINAL_FILEP(0, 0, stream, FD_API_OTHER, "p", stream);
231 int feof(FILE* stream)
233 static int (*feofp)(FILE* stream);
235 BEFORE_ORIGINAL_FILE(feof, LIBC);
237 AFTER_PACK_ORIGINAL_FILEP(ret, 0, stream, FD_API_OTHER, "p", stream);
241 int ferror(FILE* stream)
243 static int (*ferrorp)(FILE* stream);
245 BEFORE_ORIGINAL_FILE(ferror, LIBC);
246 ret = ferrorp(stream);
247 AFTER_PACK_ORIGINAL_FILEP(ret, 0, stream, FD_API_OTHER, "p", stream);
251 int fileno(FILE* stream)
253 static int (*filenop)(FILE* stream);
255 BEFORE_ORIGINAL_FILE(fileno, LIBC);
256 ret = filenop(stream);
257 AFTER_PACK_ORIGINAL_FILEP(ret, 0, stream, FD_API_OTHER, "p", stream);
261 void perror(const char* string)
263 static void (*perrorp)(const char* string);
265 BEFORE_ORIGINAL_FILE(perror, LIBC);
269 AFTER_PACK_ORIGINAL_NOFD(0, 0, FD_API_OTHER, "s", string);
272 // *******************************************************************
273 // File read / write APIs
274 // *******************************************************************
276 int vfprintf(FILE* stream, const char* format, va_list arg)
278 static int (*vfprintfp)(FILE* stream, const char* format, va_list arg);
280 BEFORE_ORIGINAL_FILE(vfprintf, LIBC);
281 ret = vfprintfp(stream, format, arg);
282 AFTER_PACK_ORIGINAL_FILEP(ret, ret, stream, FD_API_WRITE, "ps", stream, format);
286 int vfscanf(FILE* stream, const char* format, va_list arg)
288 static int (*vfscanfp)(FILE* stream, const char* format, va_list arg);
290 BEFORE_ORIGINAL_FILE(vfscanf, LIBC);
291 ret = vfscanfp(stream, format, arg);
292 AFTER_PACK_ORIGINAL_FILEP(ret, ret, stream, FD_API_READ, "ps", stream, format);
296 int fgetc(FILE* stream)
298 static int (*fgetcp)(FILE* stream);
300 BEFORE_ORIGINAL_FILE(fgetc, LIBC);
301 ret = fgetcp(stream);
302 AFTER_PACK_ORIGINAL_FILEP(ret, (ret == EOF ? 0 : 1), stream, FD_API_READ, "p", stream);
306 #if 0 // why is this commented?
307 char* fgets(char* str, int size, FILE* stream)
309 static char* (*fgetsp)(char* str, int num, FILE* stream);
312 BEFORE_ORIGINAL_FILE(fgets, LIBC);
314 cret = fgetsp(str, size, stream);
316 AFTER_PACK_ORIGINAL_FILEP(cret, (ret == NULL ? 0 : strlen(cret)),
317 stream, FD_API_READ, "sdp", str, size, stream);
323 int fputc(int character, FILE* stream)
325 static int (*fputcp)(int character, FILE* stream);
327 BEFORE_ORIGINAL_FILE(fputc, LIBC);
328 ret = fputcp(character, stream);
329 AFTER_PACK_ORIGINAL_FILEP(ret, (ret == EOF ? 0 : 1), stream, FD_API_WRITE,
330 "dp", character, stream);
334 int fputs(const char* str, FILE* stream)
336 static int (*fputsp)(const char* str, FILE* stream);
338 BEFORE_ORIGINAL_FILE(fputs, LIBC);
339 ret = fputsp(str, stream);
340 AFTER_PACK_ORIGINAL_FILEP(ret, ret, stream, FD_API_WRITE, "sp", str, stream);
344 int getc(FILE* stream)
346 static int (*getcp)(FILE* stream);
348 BEFORE_ORIGINAL_FILE(getc, LIBC);
350 AFTER_PACK_ORIGINAL_FILEP(ret, (ret == EOF ? 0 : 1), stream, FD_API_READ, "p", stream);
354 int putc(int character, FILE* stream)
356 static int (*putcp)(int character, FILE* stream);
358 BEFORE_ORIGINAL_FILE(putc, LIBC);
359 ret = putcp(character, stream);
360 AFTER_PACK_ORIGINAL_FILEP(ret, (ret == EOF ? 0 : 1), stream, FD_API_WRITE,
361 "dp", character, stream);
365 int ungetc(int character, FILE* stream)
367 static int (*ungetcp)(int character, FILE* stream);
369 BEFORE_ORIGINAL_FILE(ungetc, LIBC);
370 ret = ungetcp(character, stream);
371 AFTER_PACK_ORIGINAL_FILEP(ret, 0, stream, FD_API_OTHER, "dp", character, stream);
375 size_t fread(void* ptr, size_t size, size_t count, FILE* stream)
377 static size_t (*freadp)(void* ptr, size_t size, size_t count, FILE* stream);
380 BEFORE_ORIGINAL_FILE(fread, LIBC);
382 tret = freadp(ptr, size, count, stream);
384 AFTER_PACK_ORIGINAL_FILEP(tret, 0, stream, FD_API_READ,
385 "pxxp", ptr, size, count, stream);
390 size_t fwrite(const void* ptr, size_t size, size_t count, FILE* stream)
392 static size_t (*fwritep)(const void* ptr, size_t size, size_t count, FILE* stream);
395 BEFORE_ORIGINAL_FILE(fwrite, LIBC);
397 tret = fwritep(ptr, size, count, stream);
399 AFTER_PACK_ORIGINAL_FILEP(tret, 0, stream, FD_API_WRITE,
400 "pxxp", ptr, size, count, stream);
405 // *********************************************************
406 // variable parameter function
407 // *********************************************************
408 int fprintf(FILE* stream, const char* format, ...)
410 static int (*vfprintfp)(FILE* stream, const char* format, ...);
412 BEFORE_ORIGINAL_FILE(vfprintf, LIBC);
415 va_start(arg, format);
416 ret = vfprintfp(stream, format, arg);
418 AFTER_PACK_ORIGINAL_FILEP(ret, ret, stream, FD_API_WRITE, "ps", stream, format);
424 int fscanf(FILE* stream, const char* format, ...)
426 static int (*vfscanfp)(FILE* stream, const char* format, ...);
428 BEFORE_ORIGINAL_FILE(vfscanf, LIBC);
431 va_start(arg, format);
432 ret = vfscanfp(stream, format, arg);
434 AFTER_PACK_ORIGINAL_FILEP(ret, ret, stream, FD_API_READ, "ps", stream, format);
440 #if !defined(DA_DEBUG_LOG) && !defined(PRINT_STDOUT)
441 int printf(const char* format, ...)
443 static int (*vprintfp)(const char* format, ...);
445 BEFORE_ORIGINAL_FILE(vprintf, LIBC);
448 va_start(arg, format);
449 ret = vprintfp(format, arg);
451 AFTER_PACK_ORIGINAL_NOFD(ret, ret, FD_API_WRITE, "s", format);
458 int scanf(const char* format, ...)
460 static int (*vscanfp)(const char* format, ...);
462 BEFORE_ORIGINAL_FILE(vscanf, LIBC);
465 va_start(arg, format);
466 ret = vscanfp(format, arg);
468 AFTER_PACK_ORIGINAL_NOFD(ret, ret, FD_API_READ, "s", format);
476 static int (*getcharp)();
478 BEFORE_ORIGINAL_FILE(getchar, LIBC);
480 AFTER_PACK_ORIGINAL_NOFD(ret, (ret == EOF ? 0 : 1), FD_API_READ, "s", "");
486 static int (*putcharp)(int c);
488 BEFORE_ORIGINAL_FILE(putchar, LIBC);
490 AFTER_PACK_ORIGINAL_NOFD(ret, (ret == EOF ? 0 : 1), FD_API_WRITE, "d", c);
494 char* gets(char* str)
496 static char* (*getsp)(char* str);
499 BEFORE_ORIGINAL_FILE(gets, LIBC);
503 AFTER_PACK_ORIGINAL_NOFD(cret, strlen(cret), FD_API_READ, "s", str);
508 #if !defined(DA_DEBUG_LOG) && !defined(PRINT_STDOUT)
509 int puts(const char* str)
511 static int (*putsp)(const char* str);
513 BEFORE_ORIGINAL_FILE(puts, LIBC);
515 AFTER_PACK_ORIGINAL_NOFD(ret, ret, FD_API_WRITE, "s", str);
520 char* tmpnam(char* str)
522 static char* (*tmpnamp)(char* str);
525 BEFORE_ORIGINAL_FILE(tmpnam, LIBC);
529 AFTER_PACK_ORIGINAL_NOFD(cret, 0, FD_API_OTHER, "s", str);
534 void setbuf(FILE* stream, char* buf)
536 static void (*setbufp)(FILE* stream, char* buf);
538 BEFORE_ORIGINAL_FILE(setbuf, LIBC);
540 setbufp(stream, buf);
542 AFTER_PACK_ORIGINAL_FILEP(0, 0, stream, FD_API_OTHER, "pp", stream, buf);
545 void setbuffer(FILE* stream, char* buf, size_t size)
547 static void (*setbufferp)(FILE* stream, char* buf, size_t size);
549 BEFORE_ORIGINAL_FILE(setbuffer, LIBC);
551 setbufferp(stream, buf, size);
553 AFTER_PACK_ORIGINAL_FILEP(0, size, stream, FD_API_OTHER,
554 "ppx", stream, buf, size);
557 void setlinebuf(FILE* stream)
559 static int (*setlinebufp)(FILE* stream);
561 BEFORE_ORIGINAL_FILE(setlinebuf, LIBC);
565 AFTER_PACK_ORIGINAL_FILEP(0, 0, stream, FD_API_OTHER, "p", stream);
568 int setvbuf(FILE* stream, char* buf, int mode, size_t size)
570 static int (*setvbufp)(FILE* stream, char* buf, int mode, size_t size);
572 BEFORE_ORIGINAL_FILE(setvbuf, LIBC);
573 ret = setvbufp(stream,buf,mode,size);
574 AFTER_PACK_ORIGINAL_FILEP(ret, size, stream, FD_API_OTHER,
575 "ppdx", stream, buf, mode, size);