diff --git a/libs/freetdm/src/include/openzap.h b/libs/freetdm/src/include/openzap.h index b114e844fb..64791f4eec 100644 --- a/libs/freetdm/src/include/openzap.h +++ b/libs/freetdm/src/include/openzap.h @@ -652,6 +652,7 @@ OZ_DECLARE(zap_status_t) zap_global_set_queue_handler(zap_queue_handler_t *handl /*! \brief Duplicate string */ OZ_DECLARE(char *) zap_strdup(const char *str); +OZ_DECLARE(char *) zap_strndup(const char *str, zap_size_t inlen); OZ_DECLARE(zap_size_t) zap_fsk_modulator_generate_bit(zap_fsk_modulator_t *fsk_trans, int8_t bit, int16_t *buf, zap_size_t buflen); OZ_DECLARE(int32_t) zap_fsk_modulator_generate_carrier_bits(zap_fsk_modulator_t *fsk_trans, uint32_t bits); diff --git a/libs/freetdm/src/zap_io.c b/libs/freetdm/src/zap_io.c index b967a4c418..ba95e94bbf 100644 --- a/libs/freetdm/src/zap_io.c +++ b/libs/freetdm/src/zap_io.c @@ -3252,6 +3252,24 @@ OZ_DECLARE(char *) zap_strdup(const char *str) return (char *)memcpy(new, str, len); } +OZ_DECLARE(char *) zap_strndup(const char *str, zap_size_t inlen) +{ + char *new = NULL; + zap_size_t len = strlen(str) + 1; + if (len > (inlen+1)) { + len = inlen+1; + } + new = (char *)zap_malloc(len); + + if (!new) { + return NULL; + } + + memcpy(new, str, len-1); + new[len-1] = 0; + return new; +} + /* For Emacs: * Local Variables: