Re: [PATCH 2/6] [GSOC] ref-filter: add %(raw) atom

Subsystems: the rest

2 messages, 2 authors, 2021-06-08 · open the first message on its own page

Re: [PATCH 2/6] [GSOC] ref-filter: add %(raw) atom

From: Junio C Hamano <hidden>
Date: 2021-06-08 05:07:34

"ZheNing Hu via GitGitGadget" [off-list ref] writes:
quoted hunk
 static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, struct ref_array_item *b)
 {
 	struct atom_value *va, *vb;
@@ -2389,10 +2452,30 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru
 	} else if (s->sort_flags & REF_SORTING_VERSION) {
 		cmp = versioncmp(va->s, vb->s);
 	} else if (cmp_type == FIELD_STR) {
-		int (*cmp_fn)(const char *, const char *);
-		cmp_fn = s->sort_flags & REF_SORTING_ICASE
-			? strcasecmp : strcmp;
-		cmp = cmp_fn(va->s, vb->s);
+		if (va->s_size == ATOM_VALUE_S_SIZE_INIT &&
+		    vb->s_size == ATOM_VALUE_S_SIZE_INIT) {
+			int (*cmp_fn)(const char *, const char *);
+			cmp_fn = s->sort_flags & REF_SORTING_ICASE
+				? strcasecmp : strcmp;
+			cmp = cmp_fn(va->s, vb->s);
+		} else {
+			int (*cmp_fn)(const void *, const void *, size_t);
+			cmp_fn = s->sort_flags & REF_SORTING_ICASE
+				? memcasecmp : memcmp;
+			size_t a_size = va->s_size == ATOM_VALUE_S_SIZE_INIT ?
+					strlen(va->s) : va->s_size;
+			size_t b_size = vb->s_size == ATOM_VALUE_S_SIZE_INIT ?
+					strlen(vb->s) : vb->s_size;
This breaks -Wdecl-after-stmt.  A possible fix below.
diff --git a/ref-filter.c b/ref-filter.c
index 46aec291de..648f9cabff 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -2459,13 +2459,13 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru
 				? strcasecmp : strcmp;
 			cmp = cmp_fn(va->s, vb->s);
 		} else {
-			int (*cmp_fn)(const void *, const void *, size_t);
-			cmp_fn = s->sort_flags & REF_SORTING_ICASE
+			size_t a_size = va->s_size == ATOM_VALUE_S_SIZE_INIT
+					? strlen(va->s) : va->s_size;
+			size_t b_size = vb->s_size == ATOM_VALUE_S_SIZE_INIT
+					? strlen(vb->s) : vb->s_size;
+			int (*cmp_fn)(const void *, const void *, size_t) =
+				s->sort_flags & REF_SORTING_ICASE
 				? memcasecmp : memcmp;
-			size_t a_size = va->s_size == ATOM_VALUE_S_SIZE_INIT ?
-					strlen(va->s) : va->s_size;
-			size_t b_size = vb->s_size == ATOM_VALUE_S_SIZE_INIT ?
-					strlen(vb->s) : vb->s_size;
 
 			cmp = cmp_fn(va->s, vb->s, b_size > a_size ?
 				     a_size : b_size);

Re: [PATCH 2/6] [GSOC] ref-filter: add %(raw) atom

From: ZheNing Hu <hidden>
Date: 2021-06-08 06:11:02

Junio C Hamano [off-list ref] 于2021年6月8日周二 下午1:07写道:
quoted hunk
This breaks -Wdecl-after-stmt.  A possible fix below.
diff --git a/ref-filter.c b/ref-filter.c
index 46aec291de..648f9cabff 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -2459,13 +2459,13 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru
                                ? strcasecmp : strcmp;
                        cmp = cmp_fn(va->s, vb->s);
                } else {
-                       int (*cmp_fn)(const void *, const void *, size_t);
-                       cmp_fn = s->sort_flags & REF_SORTING_ICASE
+                       size_t a_size = va->s_size == ATOM_VALUE_S_SIZE_INIT
+                                       ? strlen(va->s) : va->s_size;
+                       size_t b_size = vb->s_size == ATOM_VALUE_S_SIZE_INIT
+                                       ? strlen(vb->s) : vb->s_size;
+                       int (*cmp_fn)(const void *, const void *, size_t) =
+                               s->sort_flags & REF_SORTING_ICASE
                                ? memcasecmp : memcmp;
-                       size_t a_size = va->s_size == ATOM_VALUE_S_SIZE_INIT ?
-                                       strlen(va->s) : va->s_size;
-                       size_t b_size = vb->s_size == ATOM_VALUE_S_SIZE_INIT ?
-                                       strlen(vb->s) : vb->s_size;

                        cmp = cmp_fn(va->s, vb->s, b_size > a_size ?
                                     a_size : b_size);
You are right.

Thanks.
--
ZheNing Hu
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help