From 65b9e144d18a5eb5664521cb67760bca69da5e9d Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Wed, 8 Jan 2003 00:16:53 +0000 Subject: [PATCH] Define safe_pack_bit_fmt and redefine safe_packstr with max_len for ease of use in slurmctld --- src/common/pack.h | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/common/pack.h b/src/common/pack.h index b2059828d11..13c1a081135 100644 --- a/src/common/pack.h +++ b/src/common/pack.h @@ -202,8 +202,34 @@ int unpackmem_array(char *valp, uint32_t size_valp, Buf buffer); goto unpack_error; \ } while (0) -#define safe_packstr \ - packstr +#define safe_pack_bit_fmt(bitmap,max_len,buf) do { \ + assert(buf->magic == BUF_MAGIC); \ + assert(max_len <= 0xffff); \ + if (bitmap) { \ + char _tmp_str[max_len]; \ + uint32_t _size; \ + bit_fmt(_tmp_str,max_len,bitmap); \ + _size = strlen(_tmp_str)+1; \ + packmem(_tmp_str,(uint16_t)_size,buf); \ + } else \ + packmem(NULL,(uint16_t)0,buf); \ +} while (0) + +#define safe_packstr(str,max_len,buf) do { \ + uint32_t _size; \ + assert(buf->magic == BUF_MAGIC); \ + assert(max_len <= 0xffff); \ + _size = (str ? strlen(str)+1 : 0); \ + assert(_size == 0 || str != NULL); \ + if (_size <= max_len) \ + packmem(str,(uint16_t)_size,buf); \ + else { \ + char tmp_str[max_len]; \ + strncpy(tmp_str, str, max_len-1); \ + tmp_str[max_len - 1] = (char) NULL; \ + packmem(tmp_str,(uint16_t)max_len,buf); \ + } \ +} while (0) #define packstr(str,buf) do { \ uint32_t _size; \ -- GitLab