Skip to content

Commit 42933bf

Browse files
committed
API: libcrmcommon: Deprecate compare_version()
Signed-off-by: Reid Wahl <[email protected]>
1 parent dc986d9 commit 42933bf

File tree

3 files changed

+100
-111
lines changed

3 files changed

+100
-111
lines changed

include/crm/common/util.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ char *pcmk_promotion_score_name(const char *rsc_id);
4242
/* public Pacemaker Remote functions (from remote.c) */
4343
int crm_default_remote_port(void);
4444

45-
int compare_version(const char *version1, const char *version2);
46-
4745
void pcmk_common_cleanup(void);
4846

4947
#ifdef __cplusplus

include/crm/common/util_compat.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ int pcmk_daemon_user(uid_t *uid, gid_t *gid);
7272
//! \deprecated Do not use
7373
int crm_user_lookup(const char *name, uid_t *uid, gid_t *gid);
7474

75+
//! \deprecated Do not use
76+
int compare_version(const char *version1, const char *version2);
77+
7578
#ifdef __cplusplus
7679
}
7780
#endif

lib/common/utils.c

Lines changed: 97 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -282,115 +282,6 @@ pcmk__compare_versions(const char *version1, const char *version2)
282282
return rc;
283283
}
284284

285-
/*!
286-
* \internal
287-
* \brief Return the integer equivalent of a portion of a string
288-
*
289-
* \param[in] text Pointer to beginning of string portion
290-
* \param[out] end_text This will point to next character after integer
291-
*/
292-
static int
293-
version_helper(const char *text, const char **end_text)
294-
{
295-
int atoi_result = -1;
296-
297-
pcmk__assert(end_text != NULL);
298-
299-
errno = 0;
300-
301-
if (text != NULL && text[0] != 0) {
302-
/* seemingly sacrificing const-correctness -- because while strtol
303-
doesn't modify the input, it doesn't want to artificially taint the
304-
"end_text" pointer-to-pointer-to-first-char-in-string with constness
305-
in case the input wasn't actually constant -- by semantic definition
306-
not a single character will get modified so it shall be perfectly
307-
safe to make compiler happy with dropping "const" qualifier here */
308-
atoi_result = (int) strtol(text, (char **) end_text, 10);
309-
310-
if (errno == EINVAL) {
311-
crm_err("Conversion of '%s' %c failed", text, text[0]);
312-
atoi_result = -1;
313-
}
314-
}
315-
return atoi_result;
316-
}
317-
318-
/*
319-
* version1 < version2 : -1
320-
* version1 = version2 : 0
321-
* version1 > version2 : 1
322-
*/
323-
int
324-
compare_version(const char *version1, const char *version2)
325-
{
326-
int rc = 0;
327-
int lpc = 0;
328-
const char *ver1_iter, *ver2_iter;
329-
330-
if (version1 == NULL && version2 == NULL) {
331-
return 0;
332-
} else if (version1 == NULL) {
333-
return -1;
334-
} else if (version2 == NULL) {
335-
return 1;
336-
}
337-
338-
ver1_iter = version1;
339-
ver2_iter = version2;
340-
341-
while (1) {
342-
int digit1 = 0;
343-
int digit2 = 0;
344-
345-
lpc++;
346-
347-
if (ver1_iter == ver2_iter) {
348-
break;
349-
}
350-
351-
if (ver1_iter != NULL) {
352-
digit1 = version_helper(ver1_iter, &ver1_iter);
353-
}
354-
355-
if (ver2_iter != NULL) {
356-
digit2 = version_helper(ver2_iter, &ver2_iter);
357-
}
358-
359-
if (digit1 < digit2) {
360-
rc = -1;
361-
break;
362-
363-
} else if (digit1 > digit2) {
364-
rc = 1;
365-
break;
366-
}
367-
368-
if (ver1_iter != NULL && *ver1_iter == '.') {
369-
ver1_iter++;
370-
}
371-
if (ver1_iter != NULL && *ver1_iter == '\0') {
372-
ver1_iter = NULL;
373-
}
374-
375-
if (ver2_iter != NULL && *ver2_iter == '.') {
376-
ver2_iter++;
377-
}
378-
if (ver2_iter != NULL && *ver2_iter == 0) {
379-
ver2_iter = NULL;
380-
}
381-
}
382-
383-
if (rc == 0) {
384-
crm_trace("%s == %s (%d)", version1, version2, lpc);
385-
} else if (rc < 0) {
386-
crm_trace("%s < %s (%d)", version1, version2, lpc);
387-
} else if (rc > 0) {
388-
crm_trace("%s > %s (%d)", version1, version2, lpc);
389-
}
390-
391-
return rc;
392-
}
393-
394285
/* @FIXME uuid.h is an optional header per configure.ac, and we include it
395286
* conditionally above. But uuid_generate() and uuid_unparse() depend on it, on
396287
* many or perhaps all systems with libuuid. So it's not clear how it would ever
@@ -647,5 +538,102 @@ pcmk_daemon_user(uid_t *uid, gid_t *gid)
647538
return rc;
648539
}
649540

541+
static int
542+
version_helper(const char *text, const char **end_text)
543+
{
544+
int atoi_result = -1;
545+
546+
pcmk__assert(end_text != NULL);
547+
548+
errno = 0;
549+
550+
if (text != NULL && text[0] != 0) {
551+
/* seemingly sacrificing const-correctness -- because while strtol
552+
doesn't modify the input, it doesn't want to artificially taint the
553+
"end_text" pointer-to-pointer-to-first-char-in-string with constness
554+
in case the input wasn't actually constant -- by semantic definition
555+
not a single character will get modified so it shall be perfectly
556+
safe to make compiler happy with dropping "const" qualifier here */
557+
atoi_result = (int) strtol(text, (char **) end_text, 10);
558+
559+
if (errno == EINVAL) {
560+
crm_err("Conversion of '%s' %c failed", text, text[0]);
561+
atoi_result = -1;
562+
}
563+
}
564+
return atoi_result;
565+
}
566+
567+
int
568+
compare_version(const char *version1, const char *version2)
569+
{
570+
int rc = 0;
571+
int lpc = 0;
572+
const char *ver1_iter, *ver2_iter;
573+
574+
if (version1 == NULL && version2 == NULL) {
575+
return 0;
576+
} else if (version1 == NULL) {
577+
return -1;
578+
} else if (version2 == NULL) {
579+
return 1;
580+
}
581+
582+
ver1_iter = version1;
583+
ver2_iter = version2;
584+
585+
while (1) {
586+
int digit1 = 0;
587+
int digit2 = 0;
588+
589+
lpc++;
590+
591+
if (ver1_iter == ver2_iter) {
592+
break;
593+
}
594+
595+
if (ver1_iter != NULL) {
596+
digit1 = version_helper(ver1_iter, &ver1_iter);
597+
}
598+
599+
if (ver2_iter != NULL) {
600+
digit2 = version_helper(ver2_iter, &ver2_iter);
601+
}
602+
603+
if (digit1 < digit2) {
604+
rc = -1;
605+
break;
606+
607+
} else if (digit1 > digit2) {
608+
rc = 1;
609+
break;
610+
}
611+
612+
if (ver1_iter != NULL && *ver1_iter == '.') {
613+
ver1_iter++;
614+
}
615+
if (ver1_iter != NULL && *ver1_iter == '\0') {
616+
ver1_iter = NULL;
617+
}
618+
619+
if (ver2_iter != NULL && *ver2_iter == '.') {
620+
ver2_iter++;
621+
}
622+
if (ver2_iter != NULL && *ver2_iter == 0) {
623+
ver2_iter = NULL;
624+
}
625+
}
626+
627+
if (rc == 0) {
628+
crm_trace("%s == %s (%d)", version1, version2, lpc);
629+
} else if (rc < 0) {
630+
crm_trace("%s < %s (%d)", version1, version2, lpc);
631+
} else if (rc > 0) {
632+
crm_trace("%s > %s (%d)", version1, version2, lpc);
633+
}
634+
635+
return rc;
636+
}
637+
650638
// LCOV_EXCL_STOP
651639
// End deprecated API

0 commit comments

Comments
 (0)