]> mj.ucw.cz Git - libucw.git/blobdiff - ucw/log-stream.c
hashtable: Implemented new HASH_TABLE_VARS parameter.
[libucw.git] / ucw / log-stream.c
index 3e94d74832ab678e1de24d4708c126e956facb1b..5af9f3e6581ad264797e64c566ba0573db40f5d8 100644 (file)
@@ -136,6 +136,7 @@ log_new_stream(size_t size)
   /* Initialize the stream */
   bzero(l, sizeof(*l));
   l->levels = ~0U;
+  l->types = ~0U;
   l->regnum = LS_SET_STRNUM(index);
   clist_init(&l->substreams);
   return log_ref_stream(l);
@@ -168,3 +169,35 @@ log_set_format(struct log_stream *ls, uns mask, uns data)
   CLIST_FOR_EACH(simp_node *, i, ls->substreams)
     log_set_format(i->p, mask, data);
 }
+
+/*** Registry of type names ***/
+
+int log_register_type(const char *name)
+{
+  if (!log_type_names)
+    {
+      log_type_names = xmalloc_zero(LS_NUM_TYPES * sizeof(char *));
+      log_type_names[0] = "default";
+    }
+  uns id;
+  for (id=0; id < LS_NUM_TYPES && log_type_names[id]; id++)
+    if (!strcmp(log_type_names[id], name))
+      return LS_SET_TYPE(id);
+  ASSERT(id < LS_NUM_TYPES);
+  log_type_names[id] = xstrdup(name);
+  return LS_SET_TYPE(id);
+}
+
+/** Find a message type by name and return its ID encoded by `LS_SET_TYPE`. Returns -1 if no such type found. **/
+int log_find_type(const char *name)
+{
+  if (!strcmp(name, "default"))
+    return 0;
+  if (!log_type_names)
+    return -1;
+
+  for (uns id=0; id < LS_NUM_TYPES && log_type_names[id]; id++)
+    if (!strcmp(log_type_names[id], name))
+      return LS_SET_TYPE(id);
+  return -1;
+}