diff options
author | Douglas Gilbert <dgilbert@interlog.com> | 2013-10-14 19:29:37 +0000 |
---|---|---|
committer | Douglas Gilbert <dgilbert@interlog.com> | 2013-10-14 19:29:37 +0000 |
commit | 189211afbafc77fdc22b7ec2cfe75fa313f12049 (patch) | |
tree | 0075f06941a30a4296d51dd443e92a9e139dce1b /src/sg_dd.c | |
parent | e8a28a4bffdb40f9d19faae694b3cea794bb2dbb (diff) | |
download | sg3_utils-189211afbafc77fdc22b7ec2cfe75fa313f12049.tar.gz |
avoid getpagesize() with sysconf() and use posix_memalign()
git-svn-id: https://svn.bingwo.ca/repos/sg3_utils/trunk@521 6180dd3e-e324-4e3e-922d-17de1ae2f315
Diffstat (limited to 'src/sg_dd.c')
-rw-r--r-- | src/sg_dd.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/sg_dd.c b/src/sg_dd.c index 1bae8d92..5475a609 100644 --- a/src/sg_dd.c +++ b/src/sg_dd.c @@ -58,7 +58,8 @@ #include "sg_cmds_extra.h" #include "sg_io_linux.h" -static const char * version_str = "5.78 20130603"; +static const char * version_str = "5.79 20131014"; + #define ME "sg_dd: " @@ -1869,8 +1870,27 @@ main(int argc, char * argv[]) if (iflag.dio || iflag.direct || oflag.direct || (FT_RAW & in_type) || (FT_RAW & out_type)) { - size_t psz = sysconf(_SC_PAGESIZE); /* was getpagesize() */ + size_t psz; + +#if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE) + psz = sysconf(_SC_PAGESIZE); /* POSIX.1 (was getpagesize()) */ +#else + psz = 4096; /* give up, pick likely figure */ +#endif + +#ifdef HAVE_POSIX_MEMALIGN + { + int err; + err = posix_memalign((void **)&wrkBuff, psz, blk_sz * bpt); + if (err) { + fprintf(stderr, "posix_memalign: error [%d] out of memory?\n", + err); + return SG_LIB_CAT_OTHER; + } + wrkPos = wrkBuff; + } +#else wrkBuff = (unsigned char*)malloc(blk_sz * bpt + psz); if (0 == wrkBuff) { fprintf(stderr, "Not enough user memory for raw\n"); @@ -1878,6 +1898,7 @@ main(int argc, char * argv[]) } wrkPos = (unsigned char *)(((unsigned long)wrkBuff + psz - 1) & (~(psz - 1))); +#endif } else { wrkBuff = (unsigned char*)malloc(blk_sz * bpt); if (0 == wrkBuff) { |