Parcourir la source

Add another prefix subst method + tests

Now we can specify a constant length to cut
Yann Weber il y a 7 ans
Parent
révision
ce41eddb7a
4 fichiers modifiés avec 62 ajouts et 9 suppressions
  1. 4
    0
      src/include/ttail.h
  2. 3
    2
      src/include/ttail_init.h
  3. 17
    1
      src/ttail_init.c
  4. 38
    6
      tests/ttail_argparse_check.c

+ 4
- 0
src/include/ttail.h Voir le fichier

21
 #define TTAIL_FLAG_DATE_MIN 2
21
 #define TTAIL_FLAG_DATE_MIN 2
22
 #define TTAIL_FLAG_DATE_MAX 4
22
 #define TTAIL_FLAG_DATE_MAX 4
23
 #define TTAIL_FLAG_FORMAT 8
23
 #define TTAIL_FLAG_FORMAT 8
24
+
24
 #define TTAIL_DEFAULT_FORMATS {"%m",\
25
 #define TTAIL_DEFAULT_FORMATS {"%m",\
25
 "%A %B %d, %Y %H:%M:%S",\
26
 "%A %B %d, %Y %H:%M:%S",\
26
 "%A",\
27
 "%A",\
45
 	
46
 	
46
 	/*! A regex matching the datetime prefix in loglines */
47
 	/*! A regex matching the datetime prefix in loglines */
47
 	regex_t date_prefix;
48
 	regex_t date_prefix;
49
+	/*! An alternative to regex is to give a constant number of char
50
+	    to delete */
51
+	int prefix_sz;
48
 
52
 
49
 	/*! A strptime format matching datetime in logfile */
53
 	/*! A strptime format matching datetime in logfile */
50
 	char *fmt;
54
 	char *fmt;

+ 3
- 2
src/include/ttail_init.h Voir le fichier

16
 
16
 
17
 #define TTAIL_LONG_OPT {\
17
 #define TTAIL_LONG_OPT {\
18
 	{"verbose", no_argument, 0, 'v'},\
18
 	{"verbose", no_argument, 0, 'v'},\
19
-	{"re-prefix", required_argument, 0, 'p'},\
19
+	{"re-prefix", required_argument, 0, 'r'},\
20
+	{"prefix-len", required_argument, 0, 'p'},\
20
 	{"date-format", required_argument, 0, 'f'},\
21
 	{"date-format", required_argument, 0, 'f'},\
21
 	{"date-min", required_argument, 0, 'd'},\
22
 	{"date-min", required_argument, 0, 'd'},\
22
 	{"date-max", required_argument, 0, 'm'},\
23
 	{"date-max", required_argument, 0, 'm'},\
23
 	{"logfile", required_argument, 0, 'l'},\
24
 	{"logfile", required_argument, 0, 'l'},\
24
 	{0,	0,	0,	0 }\
25
 	{0,	0,	0,	0 }\
25
 }
26
 }
26
-#define TTAIL_SHORT_OPT "p:f:d:l:m:"
27
+#define TTAIL_SHORT_OPT "r:p:f:d:l:m:"
27
 
28
 
28
 /**@brief Parse cli arguments and return a ttail_t
29
 /**@brief Parse cli arguments and return a ttail_t
29
  *@param int argc
30
  *@param int argc

+ 17
- 1
src/ttail_init.c Voir le fichier

22
 	res->logfile = NULL;
22
 	res->logfile = NULL;
23
 	res->logfile_name = NULL;
23
 	res->logfile_name = NULL;
24
 	res->logfile_sz = 0;
24
 	res->logfile_sz = 0;
25
+	res->prefix_sz = -1;
25
 	memset(&(res->date_min), 0, sizeof(struct tm));
26
 	memset(&(res->date_min), 0, sizeof(struct tm));
26
 	memset(&(res->date_max), 0, sizeof(struct tm));
27
 	memset(&(res->date_max), 0, sizeof(struct tm));
27
 
28
 
38
 			case 'v':
39
 			case 'v':
39
 				res->verbose++;
40
 				res->verbose++;
40
 				break;
41
 				break;
41
-			case 'p':
42
+			case 'r':
42
 				if(ttail_set_prefix(res, optarg))
43
 				if(ttail_set_prefix(res, optarg))
43
 				{
44
 				{
44
 					goto ttail_init_err;
45
 					goto ttail_init_err;
45
 				}
46
 				}
46
 				break;
47
 				break;
48
+			case 'p':
49
+				if(res->flag & TTAIL_FLAG_PREFIX)
50
+				{
51
+					fprintf(stderr, "Preffix allready \
52
+set\n");
53
+					goto ttail_init_err;
54
+				}
55
+				res->flag |= TTAIL_FLAG_PREFIX;
56
+				res->prefix_sz = atoi(optarg);
57
+				if(res->prefix_sz <= 0)
58
+				{
59
+					fprintf(stderr, "Prefix size have \
60
+to be > 0");
61
+					goto ttail_init_err;
62
+				}
47
 			case 'f':
63
 			case 'f':
48
 				if(res->flag & TTAIL_FLAG_FORMAT)
64
 				if(res->flag & TTAIL_FLAG_FORMAT)
49
 				{
65
 				{

+ 38
- 6
tests/ttail_argparse_check.c Voir le fichier

60
 		"ttail_t.verbose should be 0");
60
 		"ttail_t.verbose should be 0");
61
 }
61
 }
62
 END_TEST
62
 END_TEST
63
+START_TEST (test_argparse_empty_prefixsz)
64
+{
65
+	ck_assert_msg(ttail->prefix_sz == -1,
66
+		"ttail_t.prefix_sz should be NULL");
67
+}
68
+END_TEST
63
 
69
 
64
 /*
70
 /*
65
  * Bad arguments
71
  * Bad arguments
255
 }
261
 }
256
 END_TEST
262
 END_TEST
257
 
263
 
258
-START_TEST (test_argparse_prefix_short)
264
+START_TEST (test_argparse_reprefix_short)
259
 {
265
 {
260
 	ttail_t *t;
266
 	ttail_t *t;
261
-	char *args[] = {"foo", "-p", "^[^ ]+ "};
267
+	char *args[] = {"foo", "-r", "^[^ ]+ "};
262
 	t = ttail_init(3, args);
268
 	t = ttail_init(3, args);
263
 	ck_assert(t != NULL);
269
 	ck_assert(t != NULL);
264
 	ck_assert((t->flag & TTAIL_FLAG_PREFIX) == TTAIL_FLAG_PREFIX);
270
 	ck_assert((t->flag & TTAIL_FLAG_PREFIX) == TTAIL_FLAG_PREFIX);
265
 }
271
 }
266
 END_TEST
272
 END_TEST
267
 
273
 
268
-START_TEST (test_argparse_prefix_long)
274
+START_TEST (test_argparse_reprefix_long)
269
 {
275
 {
270
 	ttail_t *t;
276
 	ttail_t *t;
271
 	char *args[] = {"foo", "--re-prefix", "^[^ ]+ "};
277
 	char *args[] = {"foo", "--re-prefix", "^[^ ]+ "};
275
 }
281
 }
276
 END_TEST
282
 END_TEST
277
 
283
 
284
+START_TEST (test_argparse_prefixlen_short)
285
+{
286
+	ttail_t *t;
287
+	char *args[] = {"foo", "-p", "10"};
288
+	t = ttail_init(3, args);
289
+	ck_assert(t != NULL);
290
+	ck_assert((t->flag & TTAIL_FLAG_PREFIX) == TTAIL_FLAG_PREFIX);
291
+	ck_assert_int_eq(t->prefix_sz, 10);
292
+}
293
+END_TEST
294
+
295
+START_TEST (test_argparse_prefixlen_long)
296
+{
297
+	ttail_t *t;
298
+	char *args[] = {"foo", "--prefix-len", "42"};
299
+	t = ttail_init(3, args);
300
+	ck_assert(t != NULL);
301
+	ck_assert((t->flag & TTAIL_FLAG_PREFIX) == TTAIL_FLAG_PREFIX);
302
+	ck_assert_int_eq(t->prefix_sz, 42);
303
+}
304
+END_TEST
305
+
306
+
278
 START_TEST (test_argparse_prefix_multiple)
307
 START_TEST (test_argparse_prefix_multiple)
279
 {
308
 {
280
 	ttail_t *t;
309
 	ttail_t *t;
281
-	char *args[] = {"foo", "--re-prefix", "^[^ ]+ ", "-p", "^[ -]+ "};
310
+	char *args[] = {"foo", "--re-prefix", "^[^ ]+ ", "-p", "20"};
282
 	t = ttail_init(5, args);
311
 	t = ttail_init(5, args);
283
 	ck_assert(t == NULL);
312
 	ck_assert(t == NULL);
284
 }
313
 }
331
 	tcase_add_test(tc_argparse_empty, test_argparse_empty_flag);
360
 	tcase_add_test(tc_argparse_empty, test_argparse_empty_flag);
332
 	tcase_add_test(tc_argparse_empty, test_argparse_empty_fmt);
361
 	tcase_add_test(tc_argparse_empty, test_argparse_empty_fmt);
333
 	tcase_add_test(tc_argparse_empty, test_argparse_empty_verbose);
362
 	tcase_add_test(tc_argparse_empty, test_argparse_empty_verbose);
363
+	tcase_add_test(tc_argparse_empty, test_argparse_empty_prefixsz);
334
 
364
 
335
 	tc_argparse_badarg = tcase_create("bad arguments parsing");
365
 	tc_argparse_badarg = tcase_create("bad arguments parsing");
336
 	tcase_add_test(tc_argparse_badarg, test_argparse_bad1);
366
 	tcase_add_test(tc_argparse_badarg, test_argparse_bad1);
349
 	tcase_add_test(tc_argparse_files, test_argparse_file_multiple);
379
 	tcase_add_test(tc_argparse_files, test_argparse_file_multiple);
350
 
380
 
351
 	tc_argparse_prefix = tcase_create("re-prefix arguments parsing");
381
 	tc_argparse_prefix = tcase_create("re-prefix arguments parsing");
352
-	tcase_add_test(tc_argparse_prefix, test_argparse_prefix_short);
353
-	tcase_add_test(tc_argparse_prefix, test_argparse_prefix_long);
382
+	tcase_add_test(tc_argparse_prefix, test_argparse_reprefix_short);
383
+	tcase_add_test(tc_argparse_prefix, test_argparse_reprefix_long);
384
+	tcase_add_test(tc_argparse_prefix, test_argparse_prefixlen_short);
385
+	tcase_add_test(tc_argparse_prefix, test_argparse_prefixlen_long);
354
 	tcase_add_test(tc_argparse_prefix, test_argparse_prefix_multiple);
386
 	tcase_add_test(tc_argparse_prefix, test_argparse_prefix_multiple);
355
 
387
 
356
 	tc_argparse_fmt = tcase_create("date format arguments parsing");
388
 	tc_argparse_fmt = tcase_create("date format arguments parsing");

Loading…
Annuler
Enregistrer