Просмотр исходного кода

print "?" in place of non-printing bytes of obj/key/val values

* tools/corosync-objctl.c: Include <ctype.h>
(print_name): New function.
(tail_key_changed): Use it to avoid printing garbage to screen.
* include/corosync/confdb.h (confdb_key_change_notify_fn_t): Convert
type of "int" length params to "size_t".

git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@2000 fd59a12c-fef9-0310-b244-a6a79926bd2f
Jim Meyering 17 лет назад
Родитель
Сommit
41cc0e06b4
2 измененных файлов с 32 добавлено и 13 удалено
  1. 3 3
      include/corosync/confdb.h
  2. 29 10
      tools/corosync-objctl.c

+ 3 - 3
include/corosync/confdb.h

@@ -63,11 +63,11 @@ typedef void (*confdb_key_change_notify_fn_t) (
 	hdb_handle_t parent_object_handle,
 	hdb_handle_t object_handle,
 	const void *object_name,
-	int  object_name_len,
+	size_t  object_name_len,
 	const void *key_name,
-	int key_name_len,
+	size_t key_name_len,
 	const void *key_value,
-	int key_value_len);
+	size_t key_value_len);
 
 typedef void (*confdb_object_create_notify_fn_t) (
 	confdb_handle_t handle,

+ 29 - 10
tools/corosync-objctl.c

@@ -41,6 +41,7 @@
 #include <signal.h>
 #include <unistd.h>
 #include <string.h>
+#include <ctype.h>
 #include <sys/types.h>
 #include <sys/un.h>
 
@@ -72,11 +73,11 @@ static void tail_key_changed(confdb_handle_t handle,
 	hdb_handle_t parent_object_handle,
 	hdb_handle_t object_handle,
 	const void *object_name,
-	int  object_name_len,
+	size_t  object_name_len,
 	const void *key_name,
-	int key_name_len,
+	size_t key_name_len,
 	const void *key_value,
-	int key_value_len);
+	size_t key_value_len);
 
 static void tail_object_created(confdb_handle_t handle,
 	hdb_handle_t parent_object_handle,
@@ -390,21 +391,39 @@ static void create_object(confdb_handle_t handle, char * name_pt)
 	}
 }
 
+/* Print "?" in place of any non-printable byte of OBJ. */
+static void print_name (FILE *fp, const void *obj, size_t obj_len)
+{
+	const char *p = obj;
+	size_t i;
+	for (i = 0; i < obj_len; i++) {
+		int c = *p++;
+		if (!isprint (c)) {
+			c = '?';
+		}
+		fputc (c, fp);
+	}
+}
+
 static void tail_key_changed(confdb_handle_t handle,
 	confdb_change_type_t change_type,
 	hdb_handle_t parent_object_handle,
 	hdb_handle_t object_handle,
 	const void *object_name_pt,
-	int  object_name_len,
+	size_t  object_name_len,
 	const void *key_name_pt,
-	int key_name_len,
+	size_t key_name_len,
 	const void *key_value_pt,
-	int key_value_len)
+	size_t key_value_len)
 {
-	printf("key_changed> %.*s.%.*s=%.*s\n",
-	       object_name_len, (const char *)object_name_pt,
-	       key_name_len, (const char *)key_value_pt,
-	       key_value_len, (const char *)key_value_pt);
+	/* printf("key_changed> %.*s.%.*s=%.*s\n", */
+	fputs("key_changed> ", stdout);
+	print_name (stdout, object_name_pt, object_name_len);
+	fputs(".", stdout);
+	print_name (stdout, key_name_pt, key_name_len);
+	fputs("=", stdout);
+	print_name (stdout, key_value_pt, key_value_len);
+	fputs("\n", stdout);
 }
 
 static void tail_object_created(confdb_handle_t handle,