Commit c2a08740 authored by Philip Carns's avatar Philip Carns

fprintf wrapper

parent d4fc0944
...@@ -47,13 +47,13 @@ ...@@ -47,13 +47,13 @@
* *
* functions for writing data * functions for writing data
* -------------- * --------------
* int fprintf(FILE *, const char *, ...); * int fprintf(FILE *, const char *, ...); DONE
* int vfprintf(FILE *, const char *, va_list); DONE
* int fputc(int, FILE *); * int fputc(int, FILE *);
* int fputs(const char *, FILE *); * int fputs(const char *, FILE *);
* size_t fwrite(const void *, size_t, size_t, FILE *); DONE * size_t fwrite(const void *, size_t, size_t, FILE *); DONE
* int putc(int, FILE *); * int putc(int, FILE *);
* int putw(int, FILE *); * int putw(int, FILE *);
* int vfprintf(FILE *, const char *, va_list);
* *
* functions for changing file position * functions for changing file position
* -------------- * --------------
...@@ -102,6 +102,8 @@ DARSHAN_FORWARD_DECL(freopen, FILE*, (const char *path, const char *mode, FILE * ...@@ -102,6 +102,8 @@ DARSHAN_FORWARD_DECL(freopen, FILE*, (const char *path, const char *mode, FILE *
DARSHAN_FORWARD_DECL(fclose, int, (FILE *fp)); DARSHAN_FORWARD_DECL(fclose, int, (FILE *fp));
DARSHAN_FORWARD_DECL(fflush, int, (FILE *fp)); DARSHAN_FORWARD_DECL(fflush, int, (FILE *fp));
DARSHAN_FORWARD_DECL(fwrite, size_t, (const void *ptr, size_t size, size_t nmemb, FILE *stream)); DARSHAN_FORWARD_DECL(fwrite, size_t, (const void *ptr, size_t size, size_t nmemb, FILE *stream));
DARSHAN_FORWARD_DECL(fprintf, int, (FILE *stream, const char *format, ...));
DARSHAN_FORWARD_DECL(vfprintf, int, (FILE *stream, const char *format, va_list));
DARSHAN_FORWARD_DECL(fread, size_t, (void *ptr, size_t size, size_t nmemb, FILE *stream)); DARSHAN_FORWARD_DECL(fread, size_t, (void *ptr, size_t size, size_t nmemb, FILE *stream));
DARSHAN_FORWARD_DECL(fgetc, int, (FILE *stream)); DARSHAN_FORWARD_DECL(fgetc, int, (FILE *stream));
DARSHAN_FORWARD_DECL(getw, int, (FILE *stream)); DARSHAN_FORWARD_DECL(getw, int, (FILE *stream));
...@@ -417,6 +419,59 @@ size_t DARSHAN_DECL(fwrite)(const void *ptr, size_t size, size_t nmemb, FILE *st ...@@ -417,6 +419,59 @@ size_t DARSHAN_DECL(fwrite)(const void *ptr, size_t size, size_t nmemb, FILE *st
return(ret); return(ret);
} }
int DARSHAN_DECL(vfprintf)(FILE *stream, const char *format, va_list ap)
{
int ret;
double tm1, tm2;
long start_off, end_off;
MAP_OR_FAIL(vfprintf);
tm1 = darshan_core_wtime();
start_off = ftell(stream);
ret = __real_vfprintf(stream, format, ap);
end_off = ftell(stream);
tm2 = darshan_core_wtime();
STDIO_LOCK();
stdio_runtime_initialize();
if(ret > 0)
STDIO_RECORD_WRITE(stream, (end_off-start_off), tm1, tm2, 0);
STDIO_UNLOCK();
return(ret);
}
int DARSHAN_DECL(fprintf)(FILE *stream, const char *format, ...)
{
int ret;
double tm1, tm2;
va_list ap;
long start_off, end_off;
MAP_OR_FAIL(vfprintf);
tm1 = darshan_core_wtime();
/* NOTE: we intentionally switch to vfprintf here to handle the variable
* length arguments.
*/
start_off = ftell(stream);
va_start(ap, format);
ret = __real_vfprintf(stream, format, ap);
va_end(ap);
end_off = ftell(stream);
tm2 = darshan_core_wtime();
STDIO_LOCK();
stdio_runtime_initialize();
if(ret > 0)
STDIO_RECORD_WRITE(stream, (end_off-start_off), tm1, tm2, 0);
STDIO_UNLOCK();
return(ret);
}
size_t DARSHAN_DECL(fread)(void *ptr, size_t size, size_t nmemb, FILE *stream) size_t DARSHAN_DECL(fread)(void *ptr, size_t size, size_t nmemb, FILE *stream)
{ {
size_t ret; size_t ret;
...@@ -522,7 +577,7 @@ int DARSHAN_DECL(fscanf)(FILE *stream, const char *format, ...) ...@@ -522,7 +577,7 @@ int DARSHAN_DECL(fscanf)(FILE *stream, const char *format, ...)
STDIO_LOCK(); STDIO_LOCK();
stdio_runtime_initialize(); stdio_runtime_initialize();
if(ret != 0) if(ret != 0)
STDIO_RECORD_READ(stream, end_off-start_off, tm1, tm2); STDIO_RECORD_READ(stream, (end_off-start_off), tm1, tm2);
STDIO_UNLOCK(); STDIO_UNLOCK();
return(ret); return(ret);
......
...@@ -14,3 +14,5 @@ ...@@ -14,3 +14,5 @@
--wrap=getw --wrap=getw
--wrap=fgets --wrap=fgets
--wrap=fseek --wrap=fseek
--wrap=fprintf
--wrap=vfprintf
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment