*/
/**
- * Replace the previously stringshared pointer with a new content.
+ * Replace the previously stringshared pointer with new content.
*
* The string pointed by @a p_str should be previously stringshared or
* @c NULL and it will be eina_stringshare_del(). The new string will
- * be eina_stringshare_add() and then assigned to @c *p_str.
+ * be passed to eina_stringshare_add() and then assigned to @c *p_str.
*
* @param p_str pointer to the stringhare to be replaced. Must not be
* @c NULL, but @c *p_str may be @c NULL as it is a valid
}
/**
+ * Replace the previously stringshared pointer with a new content.
+ *
+ * The string pointed by @a p_str should be previously stringshared or
+ * @c NULL and it will be eina_stringshare_del(). The new string will
+ * be passed to eina_stringshare_add_length() and then assigned to @c *p_str.
+ *
+ * @param p_str pointer to the stringhare to be replaced. Must not be
+ * @c NULL, but @c *p_str may be @c NULL as it is a valid
+ * stringshare handle.
+ * @param news new string to be stringshared, may be @c NULL.
+ * @param slen The string size (<= strlen(str)).
+ *
+ * @return #EINA_TRUE if the strings were different and thus replaced,
+ * #EINA_FALSE if the strings were the same after shared.
+ */
+static inline Eina_Bool
+eina_stringshare_replace_length(const char **p_str, const char *news, unsigned int slen)
+{
+ if (*p_str == news) return EINA_FALSE;
+
+ news = eina_stringshare_add_length(news, slen);
+ eina_stringshare_del(*p_str);
+ if (*p_str == news)
+ return EINA_FALSE;
+ *p_str = news;
+ return EINA_TRUE;
+}
+
+/**
* @}
*/
EAPI void eina_stringshare_dump(void);
static inline Eina_Bool eina_stringshare_replace(const char **p_str, const char *news) EINA_ARG_NONNULL(1);
+static inline Eina_Bool eina_stringshare_replace_length(const char **p_str, const char *news, unsigned int slen) EINA_ARG_NONNULL(1);
#include "eina_inline_stringshare.x"
* it is added to the strings to be searched and a duplicated string
* of @p str is returned.
*
- * This function does not check string size, but uses the give the
+ * This function does not check string size, but uses the
* exact given size. This can be used to stringshare part of a larger
* buffer or substring.
*