diff --git a/src/readstat_writer.c b/src/readstat_writer.c index 6ab17a2d..bf20748b 100644 --- a/src/readstat_writer.c +++ b/src/readstat_writer.c @@ -19,10 +19,10 @@ static int readstat_compare_string_refs(const void *elem1, const void *elem2) { readstat_string_ref_t *ref1 = *(readstat_string_ref_t **)elem1; readstat_string_ref_t *ref2 = *(readstat_string_ref_t **)elem2; - if (ref1->first_v == ref2->first_v) - return ref1->first_o - ref2->first_o; + if (ref1->first_o == ref2->first_o) + return ref1->first_v - ref2->first_v; - return ref1->first_v - ref2->first_v; + return ref1->first_o - ref2->first_o; } readstat_string_ref_t *readstat_string_ref_init(const char *string) { diff --git a/src/stata/readstat_dta_read.c b/src/stata/readstat_dta_read.c index 952154b0..8dc4ace5 100644 --- a/src/stata/readstat_dta_read.c +++ b/src/stata/readstat_dta_read.c @@ -317,10 +317,10 @@ static readstat_error_t dta_read_tag(dta_ctx_t *ctx, const char *tag) { static int dta_compare_strls(const void *elem1, const void *elem2) { const dta_strl_t *key = (const dta_strl_t *)elem1; const dta_strl_t *target = *(const dta_strl_t **)elem2; - if (key->v == target->v) - return key->o - target->o; + if (key->o == target->o) + return key->v - target->v; - return key->v - target->v; + return key->o - target->o; } static dta_strl_t dta_interpret_strl_vo_bytes(dta_ctx_t *ctx, const unsigned char *vo_bytes) {