4 * Copyright (c) 2000 - 2011 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>
12 * This library is free software; you can redistribute it and/or modify it under
13 * the terms of the GNU Lesser General Public License as published by the
14 * Free Software Foundation; either version 2.1 of the License, or (at your option)
17 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
18 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
20 * License for more details.
22 * You should have received a copy of the GNU Lesser General Public License
23 * along with this library; if not, write to the Free Software Foundation, Inc., 51
24 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
38 #include "probeinfo.h"
43 static enum DaOptions _sopt = OPT_FILE;
45 FILE* fopen(const char* filename, const char* mode)
47 static FILE* (*fopenp)(const char* filename, const char* mode);
50 BEFORE_ORIGINAL_FILE_NOFILTER(fopen, LIBC);
51 _filepath = (char*)filename;
53 fret = fopenp(filename, mode);
55 AFTER_ORIGINAL_FILEP_RET(VT_PTR, fret, 0, fret, FD_API_OPEN, "%s, %s", filename, mode);
60 FILE* freopen(const char * filename, const char * mode, FILE * stream)
62 static FILE* (*freopenp)(const char * filename, const char * mode, FILE * stream);
65 BEFORE_ORIGINAL_FILE_NOFILTER(freopen, LIBC);
66 _filepath = (char*)filename;
68 fret = freopenp(filename, mode, stream);
70 AFTER_ORIGINAL_FILEP_RET(VT_PTR, fret, 0, fret, FD_API_OPEN,
71 "%s, %s, %p", filename, mode, stream);
76 FILE* fdopen(int fildes, const char *mode)
78 static FILE* (*fdopenp)(int fildes, const char *mode);
81 BEFORE_ORIGINAL_FILE_NOFILTER(fdopen, LIBC);
83 fret = fdopenp(fildes, mode);
85 AFTER_ORIGINAL_FILEP_RET(VT_PTR, fret, 0, fret, FD_API_OPEN, "%d, %s", fildes, mode);
90 int fflush(FILE* stream)
92 static int (*fflushp)(FILE* stream);
94 BEFORE_ORIGINAL_FILE(fflush, LIBC);
95 ret = fflushp(stream);
96 AFTER_ORIGINAL_FILEP(0, stream, FD_API_OTHER, "%p", stream);
100 int fclose(FILE* stream)
102 static int (*fclosep)(FILE* stream);
105 GET_REAL_FUNC(fclose, LIBC);
108 PRE_PROBEBLOCK_BEGIN();
109 GET_FD_FROM_FILEP(stream);
110 _fstatret = fstat(_fd, &_statbuf);
111 PRE_PROBEBLOCK_END();
113 ret = fclosep(stream);
115 POST_PROBEBLOCK_BEGIN(LC_RESOURCE, VT_INT, ret, "%p", stream);
116 POST_PROBEBLOCK_MIDDLE_FD(0, _fd, FD_API_CLOSE);
117 POST_PROBEBLOCK_CALLSTACK_RESOURCE(FD_API_CLOSE);
118 POST_PROBEBLOCK_END();
123 int remove(const char* filename)
125 static int (*removep)(const char* filename);
127 BEFORE_ORIGINAL_FILE(remove, LIBC);
128 _filepath = (char*)filename;
129 ret = removep(filename);
130 AFTER_ORIGINAL_NOFD(0, FD_API_DIRECTORY, "%s", filename);
134 int rename(const char* oldname, const char* newname)
136 static int (*renamep)(const char* oldname, const char* newname);
138 BEFORE_ORIGINAL_FILE(rename, LIBC);
139 _filepath = (char*)newname;
140 ret = renamep(oldname, newname);
141 AFTER_ORIGINAL_NOFD(0, FD_API_DIRECTORY, "%s, %s", oldname, newname);
145 FILE * tmpfile ( void )
147 static FILE* (*tmpfilep) ( void );
150 BEFORE_ORIGINAL_FILE_NOFILTER(tmpfile, LIBC);
151 _filepath = "<temp file>";
154 AFTER_ORIGINAL_FILEP_RET(VT_PTR, fret, 0, fret, FD_API_OPEN, "%s", "");
159 int fgetpos(FILE* stream, fpos_t* position)
161 static int (*fgetposp)(FILE* stream, fpos_t* position);
163 BEFORE_ORIGINAL_FILE(fgetpos, LIBC);
164 ret = fgetposp(stream, position);
165 AFTER_ORIGINAL_FILEP(0, stream, FD_API_OTHER, "%p, %p", stream, position);
169 int fseek(FILE* stream, long int offset, int origin)
171 static int (*fseekp)(FILE* stream, long int offset, int origin);
173 BEFORE_ORIGINAL_FILE(fseek, LIBC);
174 ret = fseekp(stream, offset, origin);
175 AFTER_ORIGINAL_FILEP((unsigned int)offset, stream, FD_API_OTHER,
176 "%p, %ld, %d", stream, offset, origin);
180 int fsetpos(FILE* stream, const fpos_t* pos)
182 static int (*fsetposp)(FILE* stream, const fpos_t* pos);
184 BEFORE_ORIGINAL_FILE(fsetpos, LIBC);
185 ret = fsetposp(stream, pos);
186 AFTER_ORIGINAL_FILEP(0, stream, FD_API_OTHER, "%p, %p", stream, pos);
190 long int ftell(FILE* stream)
192 static long int (*ftellp)(FILE* stream);
195 BEFORE_ORIGINAL_FILE(ftell, LIBC);
197 lret = ftellp(stream);
199 AFTER_ORIGINAL_FILEP_RET(VT_LONG, lret, 0, stream, FD_API_OTHER, "%p", stream);
204 void rewind(FILE* stream)
206 static void (*rewindp)(FILE* stream);
208 BEFORE_ORIGINAL_FILE(rewind, LIBC);
212 AFTER_ORIGINAL_FILEP_RET(VT_NULL, NULL, 0, stream, FD_API_OTHER, "%p", stream);
215 void clearerr(FILE* stream)
217 static void (*clearerrp)(FILE* stream);
219 BEFORE_ORIGINAL_FILE(clearerr, LIBC);
223 AFTER_ORIGINAL_FILEP_RET(VT_NULL, NULL, 0, stream, FD_API_OTHER, "%p", stream);
226 int feof(FILE* stream)
228 static int (*feofp)(FILE* stream);
230 BEFORE_ORIGINAL_FILE(feof, LIBC);
232 AFTER_ORIGINAL_FILEP(0, stream, FD_API_OTHER, "%p", stream);
236 int ferror(FILE* stream)
238 static int (*ferrorp)(FILE* stream);
240 BEFORE_ORIGINAL_FILE(ferror, LIBC);
241 ret = ferrorp(stream);
242 AFTER_ORIGINAL_FILEP(0, stream, FD_API_OTHER, "%p", stream);
246 int fileno(FILE* stream)
248 static int (*filenop)(FILE* stream);
250 BEFORE_ORIGINAL_FILE(fileno, LIBC);
251 ret = filenop(stream);
252 AFTER_ORIGINAL_FILEP(0, stream, FD_API_OTHER, "%p", stream);
256 void perror(const char* string)
258 static void (*perrorp)(const char* string);
260 BEFORE_ORIGINAL_FILE(perror, LIBC);
264 AFTER_ORIGINAL_NOFD_RET(VT_NULL, NULL, 0, FD_API_OTHER, "%s", string);
267 // *******************************************************************
268 // File read / write APIs
269 // *******************************************************************
271 int vfprintf(FILE* stream, const char* format, va_list arg)
273 static int (*vfprintfp)(FILE* stream, const char* format, va_list arg);
275 BEFORE_ORIGINAL_FILE(vfprintf, LIBC);
276 ret = vfprintfp(stream, format, arg);
277 AFTER_ORIGINAL_FILEP(ret, stream, FD_API_WRITE, "%p, %s", stream, format);
281 int vfscanf(FILE* stream, const char* format, va_list arg)
283 static int (*vfscanfp)(FILE* stream, const char* format, va_list arg);
285 BEFORE_ORIGINAL_FILE(vfscanf, LIBC);
286 ret = vfscanfp(stream, format, arg);
287 AFTER_ORIGINAL_FILEP(ret, stream, FD_API_READ, "%p, %s", stream, format);
291 int fgetc(FILE* stream)
293 static int (*fgetcp)(FILE* stream);
295 BEFORE_ORIGINAL_FILE(fgetc, LIBC);
296 ret = fgetcp(stream);
297 AFTER_ORIGINAL_FILEP((ret == EOF ? 0 : 1), stream, FD_API_READ, "%p", stream);
301 #if 0 // why is this commented?
302 char* fgets(char* str, int size, FILE* stream)
304 static char* (*fgetsp)(char* str, int num, FILE* stream);
307 BEFORE_ORIGINAL_FILE(fgets, LIBC);
309 cret = fgetsp(str, size, stream);
311 AFTER_ORIGINAL_FILEP_RET(VT_STR, cret, (ret == NULL ? 0 : strlen(cret)),
312 stream, FD_API_READ, "%s, %d, %p", str, size, stream);
318 int fputc(int character, FILE* stream)
320 static int (*fputcp)(int character, FILE* stream);
322 BEFORE_ORIGINAL_FILE(fputc, LIBC);
323 ret = fputcp(character, stream);
324 AFTER_ORIGINAL_FILEP((ret == EOF ? 0 : 1), stream, FD_API_WRITE,
325 "%d, %p", character, stream);
329 int fputs(const char* str, FILE* stream)
331 static int (*fputsp)(const char* str, FILE* stream);
333 BEFORE_ORIGINAL_FILE(fputs, LIBC);
334 ret = fputsp(str, stream);
335 AFTER_ORIGINAL_FILEP(ret, stream, FD_API_WRITE, "%s, %p", str, stream);
339 int getc(FILE* stream)
341 static int (*getcp)(FILE* stream);
343 BEFORE_ORIGINAL_FILE(getc, LIBC);
345 AFTER_ORIGINAL_FILEP((ret == EOF ? 0 : 1), stream, FD_API_READ, "%p", stream);
349 int putc(int character, FILE* stream)
351 static int (*putcp)(int character, FILE* stream);
353 BEFORE_ORIGINAL_FILE(putc, LIBC);
354 ret = putcp(character, stream);
355 AFTER_ORIGINAL_FILEP((ret == EOF ? 0 : 1), stream, FD_API_WRITE,
356 "%d, %p", character, stream);
360 int ungetc(int character, FILE* stream)
362 static int (*ungetcp)(int character, FILE* stream);
364 BEFORE_ORIGINAL_FILE(ungetc, LIBC);
365 ret = ungetcp(character, stream);
366 AFTER_ORIGINAL_FILEP(0, stream, FD_API_OTHER, "%d, %p", character, stream);
370 size_t fread(void* ptr, size_t size, size_t count, FILE* stream)
372 static size_t (*freadp)(void* ptr, size_t size, size_t count, FILE* stream);
375 BEFORE_ORIGINAL_FILE(fread, LIBC);
377 tret = freadp(ptr, size, count, stream);
379 AFTER_ORIGINAL_FILEP_RET(VT_SIZE_T, tret, 0, stream, FD_API_READ,
380 "%p, %u, %u, %p", ptr, size, count, stream);
385 size_t fwrite(const void* ptr, size_t size, size_t count, FILE* stream)
387 static size_t (*fwritep)(const void* ptr, size_t size, size_t count, FILE* stream);
390 BEFORE_ORIGINAL_FILE(fwrite, LIBC);
392 tret = fwritep(ptr, size, count, stream);
394 AFTER_ORIGINAL_FILEP_RET(VT_SIZE_T, tret, 0, stream, FD_API_WRITE,
395 "%p, %u, %u, %p", ptr, size, count, stream);
400 // *********************************************************
401 // variable parameter function
402 // *********************************************************
403 int fprintf(FILE* stream, const char* format, ...)
405 static int (*vfprintfp)(FILE* stream, const char* format, ...);
407 BEFORE_ORIGINAL_FILE(vfprintf, LIBC);
410 va_start(arg, format);
411 ret = vfprintfp(stream, format, arg);
413 AFTER_ORIGINAL_FILEP(ret, stream, FD_API_WRITE, "%p, %s, ...", stream, format);
419 int fscanf(FILE* stream, const char* format, ...)
421 static int (*vfscanfp)(FILE* stream, const char* format, ...);
423 BEFORE_ORIGINAL_FILE(vfscanf, LIBC);
426 va_start(arg, format);
427 ret = vfscanfp(stream, format, arg);
429 AFTER_ORIGINAL_FILEP(ret, stream, FD_API_READ, "%p, %s, ...", stream, format);
435 #if !defined(DA_DEBUG_LOG) && !defined(PRINT_STDOUT)
436 int printf(const char* format, ...)
438 static int (*vprintfp)(const char* format, ...);
440 BEFORE_ORIGINAL_FILE(vprintf, LIBC);
443 va_start(arg, format);
444 ret = vprintfp(format, arg);
446 AFTER_ORIGINAL_NOFD(ret, FD_API_WRITE, "%s,...", format);
453 int scanf(const char* format, ...)
455 static int (*vscanfp)(const char* format, ...);
457 BEFORE_ORIGINAL_FILE(vscanf, LIBC);
460 va_start(arg, format);
461 ret = vscanfp(format, arg);
463 AFTER_ORIGINAL_NOFD(ret, FD_API_READ, "%s,...", format);
471 static int (*getcharp)();
473 BEFORE_ORIGINAL_FILE(getchar, LIBC);
475 AFTER_ORIGINAL_NOFD((ret == EOF ? 0 : 1), FD_API_READ, "%s", "");
481 static int (*putcharp)(int c);
483 BEFORE_ORIGINAL_FILE(putchar, LIBC);
485 AFTER_ORIGINAL_NOFD((ret == EOF ? 0 : 1), FD_API_WRITE, "%d", c);
489 char* gets(char* str)
491 static char* (*getsp)(char* str);
494 BEFORE_ORIGINAL_FILE(gets, LIBC);
498 AFTER_ORIGINAL_NOFD_RET(VT_STR, cret, strlen(cret), FD_API_READ, "%s", str);
503 #if !defined(DA_DEBUG_LOG) && !defined(PRINT_STDOUT)
504 int puts(const char* str)
506 static int (*putsp)(const char* str);
508 BEFORE_ORIGINAL_FILE(puts, LIBC);
510 AFTER_ORIGINAL_NOFD(ret, FD_API_WRITE, "%s", str);
515 char* tmpnam(char* str)
517 static char* (*tmpnamp)(char* str);
520 BEFORE_ORIGINAL_FILE(tmpnam, LIBC);
524 AFTER_ORIGINAL_NOFD_RET(VT_STR, cret, 0, FD_API_OTHER, "%s", str);
529 void setbuf(FILE* stream, char* buf)
531 static void (*setbufp)(FILE* stream, char* buf);
533 BEFORE_ORIGINAL_FILE(setbuf, LIBC);
535 setbufp(stream, buf);
537 AFTER_ORIGINAL_FILEP_RET(VT_NULL, NULL, 0, stream, FD_API_OTHER,
538 "%p, %p", stream, buf);
541 void setbuffer(FILE* stream, char* buf, size_t size)
543 static void (*setbufferp)(FILE* stream, char* buf, size_t size);
545 BEFORE_ORIGINAL_FILE(setbuffer, LIBC);
547 setbufferp(stream, buf, size);
549 AFTER_ORIGINAL_FILEP_RET(VT_NULL, NULL, size, stream, FD_API_OTHER,
550 "%p, %p, %u", stream, buf, size);
553 void setlinebuf(FILE* stream)
555 static int (*setlinebufp)(FILE* stream);
557 BEFORE_ORIGINAL_FILE(setlinebuf, LIBC);
561 AFTER_ORIGINAL_FILEP_RET(VT_NULL, NULL, 0, stream, FD_API_OTHER, "%p", stream);
564 int setvbuf(FILE* stream, char* buf, int mode, size_t size)
566 static int (*setvbufp)(FILE* stream, char* buf, int mode, size_t size);
568 BEFORE_ORIGINAL_FILE(setvbuf, LIBC);
569 ret = setvbufp(stream,buf,mode,size);
570 AFTER_ORIGINAL_FILEP(size, stream, FD_API_OTHER,
571 "%p, %p, %d, %u", stream, buf, mode, size);