Skip to content

Commit

Permalink
sentralized safe_strncpy, using install
Browse files Browse the repository at this point in the history
  • Loading branch information
Richard C. Burhans committed Oct 18, 2024
1 parent 2f29e7c commit aa5dca4
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 74 deletions.
8 changes: 5 additions & 3 deletions recipes/genodsp/build.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
#!/bin/bash -e
set -uex

mkdir -vp ${PREFIX}/bin
mkdir -vp "${PREFIX}/bin"

make VERBOSE=1 -j ${CPU_COUNT}

cp "$SRC_DIR/genodsp" "$PREFIX/bin"
chmod ua+x "$PREFIX/bin/genodsp
if ! install -v "$SRC_DIR/genodsp" "$PREFIX/bin/genodsp"; then
echo "Failed to install genodsp binary" >&2
exit 1
fi
147 changes: 76 additions & 71 deletions recipes/genodsp/stringop-truncation.patch
Original file line number Diff line number Diff line change
@@ -1,167 +1,172 @@
diff --git a/add.c b/add.c
index 752dd5d..7f75e47 100644
index 752dd5d..8fa4bad 100644
--- a/add.c
+++ b/add.c
@@ -240,7 +240,10 @@ void op_add_apply
@@ -240,7 +240,7 @@ void op_add_apply
v = NULL;
chromSpec = find_chromosome_spec (chrom);
if (chromSpec != NULL) v = chromSpec->valVector;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

if (chromSpec == NULL) continue;
@@ -533,7 +536,10 @@ void op_subtract_apply
@@ -533,7 +533,7 @@ void op_subtract_apply
v = NULL;
chromSpec = find_chromosome_spec (chrom);
if (chromSpec != NULL) v = chromSpec->valVector;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

if (chromSpec == NULL) continue;
diff --git a/genodsp.c b/genodsp.c
index ac1704e..00377b1 100644
index ac1704e..dffd622 100644
--- a/genodsp.c
+++ b/genodsp.c
@@ -1229,7 +1229,10 @@ void read_intervals
@@ -1229,7 +1229,7 @@ void read_intervals
v = NULL;
chromSpec = find_chromosome_spec (chrom);
if (chromSpec != NULL) v = chromSpec->valVector;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

if (chromSpec == NULL) continue;
diff --git a/logical.c b/logical.c
index fb295e3..6689e51 100644
index fb295e3..45e1c20 100644
--- a/logical.c
+++ b/logical.c
@@ -497,7 +497,10 @@ void op_or_apply
@@ -497,7 +497,7 @@ void op_or_apply
v = NULL;
chromSpec = find_chromosome_spec (chrom);
if (chromSpec != NULL) v = chromSpec->valVector;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

if (chromSpec == NULL) continue;
@@ -810,7 +813,10 @@ void op_and_apply
@@ -810,7 +810,7 @@ void op_and_apply
if (chromSpec->flag) goto chrom_not_together;
}

+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

// if the current chromosome is not of any interest, ignore this
diff --git a/mask.c b/mask.c
index 4fd5ebd..283a5eb 100644
index 4fd5ebd..ddd068e 100644
--- a/mask.c
+++ b/mask.c
@@ -253,7 +253,10 @@ void op_mask_apply
@@ -253,7 +253,7 @@ void op_mask_apply
v = NULL;
chromSpec = find_chromosome_spec (chrom);
if (chromSpec != NULL) v = chromSpec->valVector;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

if (chromSpec == NULL) continue;
@@ -548,7 +551,10 @@ void op_mask_not_apply
@@ -548,7 +548,7 @@ void op_mask_not_apply
if (chromSpec->flag) goto chrom_not_together;
}

+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

// if the current chromosome is not of any interest, ignore this
diff --git a/minmax.c b/minmax.c
index c222bd0..4c9684e 100644
index c222bd0..eae69ab 100644
--- a/minmax.c
+++ b/minmax.c
@@ -261,7 +261,10 @@ void op_min_in_interval_apply
@@ -261,7 +261,7 @@ void op_min_in_interval_apply
if (chromSpec->flag) goto chrom_not_together;
}

+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

// if the current chromosome is not of any interest, ignore this
@@ -664,7 +667,10 @@ void op_max_in_interval_apply
@@ -664,7 +664,7 @@ void op_max_in_interval_apply
if (chromSpec->flag) goto chrom_not_together;
}

+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

// if the current chromosome is not of any interest, ignore this
@@ -1941,7 +1947,10 @@ void op_min_with_apply
@@ -1941,7 +1941,7 @@ void op_min_with_apply
v = NULL;
chromSpec = find_chromosome_spec (chrom);
if (chromSpec != NULL) v = chromSpec->valVector;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

if (chromSpec == NULL) continue;
@@ -2227,7 +2236,10 @@ void op_max_with_apply
@@ -2227,7 +2227,7 @@ void op_max_with_apply
v = NULL;
chromSpec = find_chromosome_spec (chrom);
if (chromSpec != NULL) v = chromSpec->valVector;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

if (chromSpec == NULL) continue;
diff --git a/multiply.c b/multiply.c
index 4c1b550..8e2fa56 100644
index 4c1b550..d04cc41 100644
--- a/multiply.c
+++ b/multiply.c
@@ -260,7 +260,10 @@ void op_multiply_apply
@@ -260,7 +260,7 @@ void op_multiply_apply
if (chromSpec->flag) goto chrom_not_together;
}

+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

// if the current chromosome is not of any interest, ignore this
@@ -654,7 +657,10 @@ void op_divide_apply
@@ -654,7 +654,7 @@ void op_divide_apply
if (chromSpec->flag) goto chrom_not_together;
}

+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstringop-truncation"
strncpy (prevChrom, chrom, sizeof(prevChrom));
+#pragma GCC diagnostic pop
- strncpy (prevChrom, chrom, sizeof(prevChrom));
+ safe_strncpy (prevChrom, chrom, sizeof(prevChrom));
}

// if the current chromosome is not of any interest, ignore this
diff --git a/utilities.c b/utilities.c
index 03d2ff1..a0cd42a 100644
--- a/utilities.c
+++ b/utilities.c
@@ -493,3 +493,13 @@ char* ucommatize
return s;
}

+//
+void safe_strncpy
+ (char *dest, const char *src, size_t n)
+ {
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wstringop-truncation"
+ strncpy(dest, src, n);
+ #pragma GCC diagnostic pop
+ //dest[n-1] = '\0'; // Ensure null-termination
+ }
diff --git a/utilities.h b/utilities.h
index ac9cef7..87cfc2d 100644
--- a/utilities.h
+++ b/utilities.h
@@ -31,6 +31,8 @@ char* skip_whitespace (char* s);
char* skip_darkspace (char* s);
char* duration_to_string (float seconds);
char* ucommatize (const u32 v);
+void safe_strncpy (char *dest, const char *src, size_t n);
+

// miscellany

0 comments on commit aa5dca4

Please sign in to comment.