X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=cutils.c;h=f9a7e3689e04605beebabef940f280e1a8fca572;hb=4ec648dd6ed97182d123e0df5bc5012c734aa858;hp=4d2e27c13a0924ae7df810797fca9acbbcd6a84f;hpb=b22b7b729d2d617c49381843362bc3ef336d66ec;p=qemu.git diff --git a/cutils.c b/cutils.c index 4d2e27c13..f9a7e3689 100644 --- a/cutils.c +++ b/cutils.c @@ -267,6 +267,37 @@ void qemu_iovec_memset(QEMUIOVector *qiov, int c, size_t count) } } +void qemu_iovec_memset_skip(QEMUIOVector *qiov, int c, size_t count, + size_t skip) +{ + int i; + size_t done; + void *iov_base; + uint64_t iov_len; + + done = 0; + for (i = 0; (i < qiov->niov) && (done != count); i++) { + if (skip >= qiov->iov[i].iov_len) { + /* Skip the whole iov */ + skip -= qiov->iov[i].iov_len; + continue; + } else { + /* Skip only part (or nothing) of the iov */ + iov_base = (uint8_t*) qiov->iov[i].iov_base + skip; + iov_len = qiov->iov[i].iov_len - skip; + skip = 0; + } + + if (done + iov_len > count) { + memset(iov_base, c, count - done); + break; + } else { + memset(iov_base, c, iov_len); + } + done += iov_len; + } +} + #ifndef _WIN32 /* Sets a specific flag */ int fcntl_setfl(int fd, int flag) @@ -294,7 +325,8 @@ int fcntl_setfl(int fd, int flag) int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix) { int64_t retval = -1; - char *endptr, c, d; + char *endptr; + unsigned char c, d; int mul_required = 0; double val, mul, integral, fraction; @@ -303,8 +335,8 @@ int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix) if (isnan(val) || endptr == nptr || errno != 0) { goto fail; } - integral = modf(val, &fraction); - if (integral != 0) { + fraction = modf(val, &integral); + if (fraction != 0) { mul_required = 1; } /* @@ -314,7 +346,7 @@ int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix) */ c = *endptr; d = c; - if (isspace(c) || c == '\0' || c == ',') { + if (qemu_isspace(c) || c == '\0' || c == ',') { c = 0; if (default_suffix) { d = default_suffix; @@ -322,32 +354,27 @@ int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix) d = c; } } - switch (d) { - case 'B': - case 'b': + switch (qemu_toupper(d)) { + case STRTOSZ_DEFSUFFIX_B: mul = 1; if (mul_required) { goto fail; } break; - case 'K': - case 'k': + case STRTOSZ_DEFSUFFIX_KB: mul = 1 << 10; break; case 0: if (mul_required) { goto fail; } - case 'M': - case 'm': + case STRTOSZ_DEFSUFFIX_MB: mul = 1ULL << 20; break; - case 'G': - case 'g': + case STRTOSZ_DEFSUFFIX_GB: mul = 1ULL << 30; break; - case 'T': - case 't': + case STRTOSZ_DEFSUFFIX_TB: mul = 1ULL << 40; break; default: @@ -361,7 +388,7 @@ int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix) */ if (c != 0) { endptr++; - if (!isspace(*endptr) && *endptr != ',' && *endptr != 0) { + if (!qemu_isspace(*endptr) && *endptr != ',' && *endptr != 0) { goto fail; } }