aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/clen.go11
-rw-r--r--utils/clen_test.go26
2 files changed, 37 insertions, 0 deletions
diff --git a/utils/clen.go b/utils/clen.go
new file mode 100644
index 0000000..17d1c4b
--- /dev/null
+++ b/utils/clen.go
@@ -0,0 +1,11 @@
+package utils
+
+// Clen returns the length of a null terminated string like in C
+func Clen(n []byte) int {
+ for i := 0; i < len(n); i++ {
+ if n[i] == 0 {
+ return i
+ }
+ }
+ return len(n)
+}
diff --git a/utils/clen_test.go b/utils/clen_test.go
new file mode 100644
index 0000000..19361b0
--- /dev/null
+++ b/utils/clen_test.go
@@ -0,0 +1,26 @@
+package utils
+
+import "testing"
+
+func TestClen(t *testing.T) {
+ normalString := append([]byte("abcd"), 0)
+ type args struct {
+ n []byte
+ }
+ tests := []struct {
+ name string
+ args args
+ want int
+ }{
+ {"empty string", args{}, 0},
+ {"normal string", args{normalString}, 4},
+ {"non null terminated string", args{[]byte("abcd")}, 4},
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ if got := Clen(tt.args.n); got != tt.want {
+ t.Errorf("Clen() = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}