Mercurial > hg > nnchat
comparison util.c @ 541:44f67ec5e945
Improve logging facilities. Private chats in query windows are now logged
separately. A log file directory can be set in configuration. Room log files
are always of format room_%d.ext. Log file extension can be set, default is
".log".
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 11 Nov 2012 18:32:42 +0200 |
parents | 8a52651bb88d |
children | 97a49a6cc959 |
comparison
equal
deleted
inserted
replaced
540:658c188101a6 | 541:44f67ec5e945 |
---|---|
713 void nn_strtuple_free(nn_strtuple_t *tuple) | 713 void nn_strtuple_free(nn_strtuple_t *tuple) |
714 { | 714 { |
715 th_free(tuple->str); | 715 th_free(tuple->str); |
716 th_free(tuple); | 716 th_free(tuple); |
717 } | 717 } |
718 | |
719 | |
720 #define VPUTCH(CH) th_vputch(&bufData, &bufSize, &bufLen, CH) | |
721 #define VPUTS(STR) th_vputs(&bufData, &bufSize, &bufLen, STR) | |
722 | |
723 char *nn_log_parse_filename(const char *fmt, int id) | |
724 { | |
725 size_t bufSize = strlen(fmt) + TH_BUFGROW, bufLen = 0, pos = 0; | |
726 char *bufData = th_malloc(bufSize); | |
727 char *copy = th_strdup(fmt); | |
728 | |
729 while (fmt[pos]) | |
730 { | |
731 if (fmt[pos] == '%') | |
732 { | |
733 char tmpBuf[64]; | |
734 size_t start = pos++; | |
735 | |
736 if (fmt[pos] == '-') | |
737 pos++; | |
738 | |
739 while (isdigit(fmt[pos])) pos++; | |
740 | |
741 switch (fmt[pos]) | |
742 { | |
743 case 'i': | |
744 case 'd': | |
745 copy[pos + 1] = 0; | |
746 snprintf(tmpBuf, sizeof(tmpBuf), ©[start], id); | |
747 VPUTS(tmpBuf); | |
748 break; | |
749 | |
750 case 's': | |
751 copy[pos + 1] = 0; | |
752 // snprintf(tmpBuf, sizeof(tmpBuf), ©[start], ); | |
753 VPUTS(tmpBuf); | |
754 break; | |
755 | |
756 case '%': | |
757 VPUTCH('%'); | |
758 break; | |
759 | |
760 default: | |
761 goto error; | |
762 } | |
763 } | |
764 else | |
765 VPUTCH(fmt[pos]); | |
766 pos++; | |
767 } | |
768 | |
769 error: | |
770 VPUTCH(0); | |
771 th_free(copy); | |
772 return bufData; | |
773 } |