瀏覽代碼

Bugfix & enhancement

Yann Weber 7 年之前
父節點
當前提交
7dd93d8688
共有 9 個文件被更改,包括 44 次插入560 次删除
  1. 9
    0
      .gitignore
  2. 9
    0
      README
  3. 1
    1
      bootstrap.sh
  4. 15
    14
      configure.ac
  5. 0
    534
      install-sh
  6. 0
    1
      src/Makefile.am
  7. 6
    6
      src/include/ttail.h
  8. 4
    4
      src/ttail.c
  9. 0
    0
      tests/ttail_argparse_check.c

+ 9
- 0
.gitignore 查看文件

@@ -1 +1,10 @@
1 1
 .*.swp
2
+Makefile.in
3
+configure
4
+aclocal.m4
5
+autom4te.cache/
6
+compile
7
+depcomp
8
+missing
9
+test-driver
10
+install-sh

+ 9
- 0
README 查看文件

@@ -0,0 +1,9 @@
1
+Compilation
2
+===========
3
+
4
+#run aclocal automake and autoconf
5
+./run_autotools.sh
6
+#run the configure script
7
+./configure
8
+#make + unit testing
9
+make && make check

run_autotools.sh → bootstrap.sh 查看文件

@@ -2,7 +2,7 @@
2 2
 
3 3
 [ "$1" = "clean" ] && [ -f "Makefile" ] && make distclean # pour les .o
4 4
 
5
-rm -fR configure aclocal.m4 autom4te.cache src/Makefile.in src/mods/Makefile.in tests/Makefile.in Makefile.in compile depcomp install-sh missing
5
+rm -fR configure aclocal.m4 autom4te.cache src/Makefile.in tests/Makefile.in Makefile.in compile depcomp install-sh missing
6 6
 
7 7
 [ "$1" = "clean" ] && exit 0
8 8
 

+ 15
- 14
configure.ac 查看文件

@@ -3,6 +3,16 @@
3 3
 
4 4
 AC_PREREQ([2.69])
5 5
 AC_INIT([ttail], [0.0.1], [yann.weber@member.fsf.org])
6
+AM_INIT_AUTOMAKE
7
+
8
+#configure options
9
+AC_ARG_ENABLE([debug],[  --enable-debug turn on debugging],
10
+[case "${enableval}" in
11
+	yes) debug=true ;;
12
+	no)  debug=false ;;
13
+	*) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
14
+esac],[debug=false])
15
+AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])
6 16
 
7 17
 AC_CONFIG_HEADERS([src/include/config.h])
8 18
 AC_CONFIG_SRCDIR([src/ttail.c])
@@ -20,25 +30,13 @@ AC_SEARCH_LIBS([dlopen], [dl dld], [], [
20 30
 	AC_MSG_ERROR([unable to find the dlopen() function])
21 31
 ])
22 32
 PKG_CHECK_MODULES([CHECK], [check >= 0.9.4]) 
33
+AS_IF([test x$debug = xtrue], [CK_FORK=no],[])
23 34
 
24 35
 # Checks for header files.
25 36
 AC_CHECK_HEADERS([stdlib.h string.h])
26 37
 
27 38
 # Checks for typedefs, structures, and compiler characteristics.
28 39
 AC_TYPE_SIZE_T
29
-#CFLAGS="$CFLAGS -I$(top_builddir)/src/include/"
30
-# Checks for library functions.
31
-AC_FUNC_MALLOC
32
-AC_FUNC_REALLOC
33
-
34
-AC_ARG_ENABLE([debug],[  --enable-debug turn on debugging],
35
-[case "${enableval}" in
36
-	yes) debug=true ;;
37
-	no)  debug=false ;;
38
-	*) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
39
-esac],[debug=false])
40
-AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])
41
-
42 40
 AS_IF([test x$debug = xtrue], [
43 41
 	AX_CHECK_CFLAGS([-Wall])
44 42
 	AX_CHECK_CFLAGS([-g])
@@ -54,7 +52,10 @@ AS_IF([test x$debug = xtrue], [
54 52
 ])
55 53
 AX_CHECK_CFLAGS([-D_XOPEN_SOURCE -D_GNU_SOURCE])
56 54
 
57
-AM_INIT_AUTOMAKE
55
+
56
+# Checks for library functions.
57
+AC_FUNC_MALLOC
58
+AC_FUNC_REALLOC
58 59
 
59 60
 AC_CONFIG_FILES([Makefile
60 61
 		src/Makefile

+ 0
- 534
install-sh 查看文件

@@ -1,534 +0,0 @@
1
-#!/bin/sh
2
-# install - install a program, script, or datafile
3
-
4
-scriptversion=2011-11-20.07; # UTC
5
-
6
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
7
-# later released in X11R6 (xc/config/util/install.sh) with the
8
-# following copyright and license.
9
-#
10
-# Copyright (C) 1994 X Consortium
11
-#
12
-# Permission is hereby granted, free of charge, to any person obtaining a copy
13
-# of this software and associated documentation files (the "Software"), to
14
-# deal in the Software without restriction, including without limitation the
15
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16
-# sell copies of the Software, and to permit persons to whom the Software is
17
-# furnished to do so, subject to the following conditions:
18
-#
19
-# The above copyright notice and this permission notice shall be included in
20
-# all copies or substantial portions of the Software.
21
-#
22
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
25
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
26
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
27
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
-#
29
-# Except as contained in this notice, the name of the X Consortium shall not
30
-# be used in advertising or otherwise to promote the sale, use or other deal-
31
-# ings in this Software without prior written authorization from the X Consor-
32
-# tium.
33
-#
34
-#
35
-# FSF changes to this file are in the public domain.
36
-#
37
-# Calling this script install-sh is preferred over install.sh, to prevent
38
-# 'make' implicit rules from creating a file called install from it
39
-# when there is no Makefile.
40
-#
41
-# This script is compatible with the BSD install script, but was written
42
-# from scratch.
43
-
44
-nl='
45
-'
46
-IFS=" ""	$nl"
47
-
48
-# set DOITPROG to echo to test this script
49
-
50
-# Don't use :- since 4.3BSD and earlier shells don't like it.
51
-doit=${DOITPROG-}
52
-if test -z "$doit"; then
53
-  doit_exec=exec
54
-else
55
-  doit_exec=$doit
56
-fi
57
-
58
-# Put in absolute file names if you don't have them in your path;
59
-# or use environment vars.
60
-
61
-chgrpprog=${CHGRPPROG-chgrp}
62
-chmodprog=${CHMODPROG-chmod}
63
-chownprog=${CHOWNPROG-chown}
64
-cmpprog=${CMPPROG-cmp}
65
-cpprog=${CPPROG-cp}
66
-mkdirprog=${MKDIRPROG-mkdir}
67
-mvprog=${MVPROG-mv}
68
-rmprog=${RMPROG-rm}
69
-stripprog=${STRIPPROG-strip}
70
-
71
-posix_glob='?'
72
-initialize_posix_glob='
73
-  test "$posix_glob" != "?" || {
74
-    if (set -f) 2>/dev/null; then
75
-      posix_glob=
76
-    else
77
-      posix_glob=:
78
-    fi
79
-  }
80
-'
81
-
82
-posix_mkdir=
83
-
84
-# Desired mode of installed file.
85
-mode=0755
86
-
87
-chgrpcmd=
88
-chmodcmd=$chmodprog
89
-chowncmd=
90
-mvcmd=$mvprog
91
-rmcmd="$rmprog -f"
92
-stripcmd=
93
-
94
-src=
95
-dst=
96
-dir_arg=
97
-dst_arg=
98
-
99
-copy_on_change=false
100
-no_target_directory=
101
-
102
-usage="\
103
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
104
-   or: $0 [OPTION]... SRCFILES... DIRECTORY
105
-   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
106
-   or: $0 [OPTION]... -d DIRECTORIES...
107
-
108
-In the 1st form, copy SRCFILE to DSTFILE.
109
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
110
-In the 4th, create DIRECTORIES.
111
-
112
-Options:
113
-     --help     display this help and exit.
114
-     --version  display version info and exit.
115
-
116
-  -c            (ignored)
117
-  -C            install only if different (preserve the last data modification time)
118
-  -d            create directories instead of installing files.
119
-  -g GROUP      $chgrpprog installed files to GROUP.
120
-  -m MODE       $chmodprog installed files to MODE.
121
-  -o USER       $chownprog installed files to USER.
122
-  -s            $stripprog installed files.
123
-  -t DIRECTORY  install into DIRECTORY.
124
-  -T            report an error if DSTFILE is a directory.
125
-
126
-Environment variables override the default commands:
127
-  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
128
-  RMPROG STRIPPROG
129
-"
130
-
131
-while test $# -ne 0; do
132
-  case $1 in
133
-    -c) ;;
134
-
135
-    -C) copy_on_change=true;;
136
-
137
-    -d) dir_arg=true;;
138
-
139
-    -g) chgrpcmd="$chgrpprog $2"
140
-	shift;;
141
-
142
-    --help) echo "$usage"; exit $?;;
143
-
144
-    -m) mode=$2
145
-	case $mode in
146
-	  *' '* | *'	'* | *'
147
-'*	  | *'*'* | *'?'* | *'['*)
148
-	    echo "$0: invalid mode: $mode" >&2
149
-	    exit 1;;
150
-	esac
151
-	shift;;
152
-
153
-    -o) chowncmd="$chownprog $2"
154
-	shift;;
155
-
156
-    -s) stripcmd=$stripprog;;
157
-
158
-    -t) dst_arg=$2
159
-	# Protect names problematic for 'test' and other utilities.
160
-	case $dst_arg in
161
-	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
162
-	esac
163
-	shift;;
164
-
165
-    -T) no_target_directory=true;;
166
-
167
-    --version) echo "$0 $scriptversion"; exit $?;;
168
-
169
-    --)	shift
170
-	break;;
171
-
172
-    -*)	echo "$0: invalid option: $1" >&2
173
-	exit 1;;
174
-
175
-    *)  break;;
176
-  esac
177
-  shift
178
-done
179
-
180
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
181
-  # When -d is used, all remaining arguments are directories to create.
182
-  # When -t is used, the destination is already specified.
183
-  # Otherwise, the last argument is the destination.  Remove it from $@.
184
-  for arg
185
-  do
186
-    if test -n "$dst_arg"; then
187
-      # $@ is not empty: it contains at least $arg.
188
-      set fnord "$@" "$dst_arg"
189
-      shift # fnord
190
-    fi
191
-    shift # arg
192
-    dst_arg=$arg
193
-    # Protect names problematic for 'test' and other utilities.
194
-    case $dst_arg in
195
-      -* | [=\(\)!]) dst_arg=./$dst_arg;;
196
-    esac
197
-  done
198
-fi
199
-
200
-if test $# -eq 0; then
201
-  if test -z "$dir_arg"; then
202
-    echo "$0: no input file specified." >&2
203
-    exit 1
204
-  fi
205
-  # It's OK to call 'install-sh -d' without argument.
206
-  # This can happen when creating conditional directories.
207
-  exit 0
208
-fi
209
-
210
-if test -z "$dir_arg"; then
211
-  do_exit='(exit $ret); exit $ret'
212
-  trap "ret=129; $do_exit" 1
213
-  trap "ret=130; $do_exit" 2
214
-  trap "ret=141; $do_exit" 13
215
-  trap "ret=143; $do_exit" 15
216
-
217
-  # Set umask so as not to create temps with too-generous modes.
218
-  # However, 'strip' requires both read and write access to temps.
219
-  case $mode in
220
-    # Optimize common cases.
221
-    *644) cp_umask=133;;
222
-    *755) cp_umask=22;;
223
-
224
-    *[0-7])
225
-      if test -z "$stripcmd"; then
226
-	u_plus_rw=
227
-      else
228
-	u_plus_rw='% 200'
229
-      fi
230
-      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
231
-    *)
232
-      if test -z "$stripcmd"; then
233
-	u_plus_rw=
234
-      else
235
-	u_plus_rw=,u+rw
236
-      fi
237
-      cp_umask=$mode$u_plus_rw;;
238
-  esac
239
-fi
240
-
241
-for src
242
-do
243
-  # Protect names problematic for 'test' and other utilities.
244
-  case $src in
245
-    -* | [=\(\)!]) src=./$src;;
246
-  esac
247
-
248
-  if test -n "$dir_arg"; then
249
-    dst=$src
250
-    dstdir=$dst
251
-    test -d "$dstdir"
252
-    dstdir_status=$?
253
-  else
254
-
255
-    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
256
-    # might cause directories to be created, which would be especially bad
257
-    # if $src (and thus $dsttmp) contains '*'.
258
-    if test ! -f "$src" && test ! -d "$src"; then
259
-      echo "$0: $src does not exist." >&2
260
-      exit 1
261
-    fi
262
-
263
-    if test -z "$dst_arg"; then
264
-      echo "$0: no destination specified." >&2
265
-      exit 1
266
-    fi
267
-    dst=$dst_arg
268
-
269
-    # If destination is a directory, append the input filename; won't work
270
-    # if double slashes aren't ignored.
271
-    if test -d "$dst"; then
272
-      if test -n "$no_target_directory"; then
273
-	echo "$0: $dst_arg: Is a directory" >&2
274
-	exit 1
275
-      fi
276
-      dstdir=$dst
277
-      dst=$dstdir/`basename "$src"`
278
-      dstdir_status=0
279
-    else
280
-      # Prefer dirname, but fall back on a substitute if dirname fails.
281
-      dstdir=`
282
-	(dirname "$dst") 2>/dev/null ||
283
-	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
284
-	     X"$dst" : 'X\(//\)[^/]' \| \
285
-	     X"$dst" : 'X\(//\)$' \| \
286
-	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
287
-	echo X"$dst" |
288
-	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
289
-		   s//\1/
290
-		   q
291
-		 }
292
-		 /^X\(\/\/\)[^/].*/{
293
-		   s//\1/
294
-		   q
295
-		 }
296
-		 /^X\(\/\/\)$/{
297
-		   s//\1/
298
-		   q
299
-		 }
300
-		 /^X\(\/\).*/{
301
-		   s//\1/
302
-		   q
303
-		 }
304
-		 s/.*/./; q'
305
-      `
306
-
307
-      test -d "$dstdir"
308
-      dstdir_status=$?
309
-    fi
310
-  fi
311
-
312
-  obsolete_mkdir_used=false
313
-
314
-  if test $dstdir_status != 0; then
315
-    case $posix_mkdir in
316
-      '')
317
-	# Create intermediate dirs using mode 755 as modified by the umask.
318
-	# This is like FreeBSD 'install' as of 1997-10-28.
319
-	umask=`umask`
320
-	case $stripcmd.$umask in
321
-	  # Optimize common cases.
322
-	  *[2367][2367]) mkdir_umask=$umask;;
323
-	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
324
-
325
-	  *[0-7])
326
-	    mkdir_umask=`expr $umask + 22 \
327
-	      - $umask % 100 % 40 + $umask % 20 \
328
-	      - $umask % 10 % 4 + $umask % 2
329
-	    `;;
330
-	  *) mkdir_umask=$umask,go-w;;
331
-	esac
332
-
333
-	# With -d, create the new directory with the user-specified mode.
334
-	# Otherwise, rely on $mkdir_umask.
335
-	if test -n "$dir_arg"; then
336
-	  mkdir_mode=-m$mode
337
-	else
338
-	  mkdir_mode=
339
-	fi
340
-
341
-	posix_mkdir=false
342
-	case $umask in
343
-	  *[123567][0-7][0-7])
344
-	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
345
-	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
346
-	    ;;
347
-	  *)
348
-            # $RANDOM is not portable (e.g. dash);  use it when possible to
349
-            # lower collision chance
350
-	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
351
-	    trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
352
-
353
-	     # As "mkdir -p" follows symlinks and we work in /tmp possibly;  so
354
-	     # create the $tmpdir first (and fail if unsuccessful) to make sure
355
-	     # that nobody tries to guess the $tmpdir name.
356
-	    if (umask $mkdir_umask &&
357
-		$mkdirprog $mkdir_mode "$tmpdir" &&
358
-		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
359
-	    then
360
-	      if test -z "$dir_arg" || {
361
-		   # Check for POSIX incompatibilities with -m.
362
-		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
363
-		   # other-writable bit of parent directory when it shouldn't.
364
-		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
365
-		   test_tmpdir="$tmpdir/a"
366
-		   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
367
-		   case $ls_ld_tmpdir in
368
-		     d????-?r-*) different_mode=700;;
369
-		     d????-?--*) different_mode=755;;
370
-		     *) false;;
371
-		   esac &&
372
-		   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
373
-		     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
374
-		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
375
-		   }
376
-		 }
377
-	      then posix_mkdir=:
378
-	      fi
379
-	      rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
380
-	    else
381
-	      # Remove any dirs left behind by ancient mkdir implementations.
382
-	      rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
383
-	    fi
384
-	    trap '' 0;;
385
-	esac;;
386
-    esac
387
-
388
-    if
389
-      $posix_mkdir && (
390
-	umask $mkdir_umask &&
391
-	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
392
-      )
393
-    then :
394
-    else
395
-
396
-      # The umask is ridiculous, or mkdir does not conform to POSIX,
397
-      # or it failed possibly due to a race condition.  Create the
398
-      # directory the slow way, step by step, checking for races as we go.
399
-
400
-      case $dstdir in
401
-	/*) prefix='/';;
402
-	[-=\(\)!]*) prefix='./';;
403
-	*)  prefix='';;
404
-      esac
405
-
406
-      eval "$initialize_posix_glob"
407
-
408
-      oIFS=$IFS
409
-      IFS=/
410
-      $posix_glob set -f
411
-      set fnord $dstdir
412
-      shift
413
-      $posix_glob set +f
414
-      IFS=$oIFS
415
-
416
-      prefixes=
417
-
418
-      for d
419
-      do
420
-	test X"$d" = X && continue
421
-
422
-	prefix=$prefix$d
423
-	if test -d "$prefix"; then
424
-	  prefixes=
425
-	else
426
-	  if $posix_mkdir; then
427
-	    (umask=$mkdir_umask &&
428
-	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
429
-	    # Don't fail if two instances are running concurrently.
430
-	    test -d "$prefix" || exit 1
431
-	  else
432
-	    case $prefix in
433
-	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
434
-	      *) qprefix=$prefix;;
435
-	    esac
436
-	    prefixes="$prefixes '$qprefix'"
437
-	  fi
438
-	fi
439
-	prefix=$prefix/
440
-      done
441
-
442
-      if test -n "$prefixes"; then
443
-	# Don't fail if two instances are running concurrently.
444
-	(umask $mkdir_umask &&
445
-	 eval "\$doit_exec \$mkdirprog $prefixes") ||
446
-	  test -d "$dstdir" || exit 1
447
-	obsolete_mkdir_used=true
448
-      fi
449
-    fi
450
-  fi
451
-
452
-  if test -n "$dir_arg"; then
453
-    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
454
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
455
-    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
456
-      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
457
-  else
458
-
459
-    # Make a couple of temp file names in the proper directory.
460
-    dsttmp=$dstdir/_inst.$$_
461
-    rmtmp=$dstdir/_rm.$$_
462
-
463
-    # Trap to clean up those temp files at exit.
464
-    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
465
-
466
-    # Copy the file name to the temp name.
467
-    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
468
-
469
-    # and set any options; do chmod last to preserve setuid bits.
470
-    #
471
-    # If any of these fail, we abort the whole thing.  If we want to
472
-    # ignore errors from any of these, just make sure not to ignore
473
-    # errors from the above "$doit $cpprog $src $dsttmp" command.
474
-    #
475
-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
476
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
477
-    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
478
-    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
479
-
480
-    # If -C, don't bother to copy if it wouldn't change the file.
481
-    if $copy_on_change &&
482
-       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
483
-       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
484
-
485
-       eval "$initialize_posix_glob" &&
486
-       $posix_glob set -f &&
487
-       set X $old && old=:$2:$4:$5:$6 &&
488
-       set X $new && new=:$2:$4:$5:$6 &&
489
-       $posix_glob set +f &&
490
-
491
-       test "$old" = "$new" &&
492
-       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
493
-    then
494
-      rm -f "$dsttmp"
495
-    else
496
-      # Rename the file to the real destination.
497
-      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
498
-
499
-      # The rename failed, perhaps because mv can't rename something else
500
-      # to itself, or perhaps because mv is so ancient that it does not
501
-      # support -f.
502
-      {
503
-	# Now remove or move aside any old file at destination location.
504
-	# We try this two ways since rm can't unlink itself on some
505
-	# systems and the destination file might be busy for other
506
-	# reasons.  In this case, the final cleanup might fail but the new
507
-	# file should still install successfully.
508
-	{
509
-	  test ! -f "$dst" ||
510
-	  $doit $rmcmd -f "$dst" 2>/dev/null ||
511
-	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
512
-	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
513
-	  } ||
514
-	  { echo "$0: cannot unlink or rename $dst" >&2
515
-	    (exit 1); exit 1
516
-	  }
517
-	} &&
518
-
519
-	# Now rename the file to the real destination.
520
-	$doit $mvcmd "$dsttmp" "$dst"
521
-      }
522
-    fi || exit 1
523
-
524
-    trap '' 0
525
-  fi
526
-done
527
-
528
-# Local variables:
529
-# eval: (add-hook 'write-file-hooks 'time-stamp)
530
-# time-stamp-start: "scriptversion="
531
-# time-stamp-format: "%:y-%02m-%02d.%02H"
532
-# time-stamp-time-zone: "UTC"
533
-# time-stamp-end: "; # UTC"
534
-# End:

+ 0
- 1
src/Makefile.am 查看文件

@@ -3,4 +3,3 @@ noinst_LIBRARIES=libttail.a
3 3
 
4 4
 libttail_a_SOURCES = ttail.c
5 5
 ttail_SOURCES = main.c ttail.c
6
-#ttail_CFLAGS = @CFLAGS@

+ 6
- 6
src/include/ttail.h 查看文件

@@ -1,16 +1,16 @@
1 1
 #ifndef _ttail_h__
2 2
 #define _ttail_h__
3 3
 
4
-#include <errno.h>
5
-#include <unistd.h>
6
-#include <stdlib.h>
7
-#include <stdio.h>
8
-#include <string.h>
9 4
 #include <ctype.h>
5
+#include <errno.h>
10 6
 #include <getopt.h>
11
-#include <time.h>
12 7
 #include <regex.h>
8
+#include <stdio.h>
9
+#include <stdlib.h>
10
+#include <string.h>
13 11
 #include <sys/types.h>
12
+#include <time.h>
13
+#include <unistd.h>
14 14
 
15 15
 
16 16
 struct _ttail_s

+ 4
- 4
src/ttail.c 查看文件

@@ -1,4 +1,4 @@
1
-#include "include/ttail.h"
1
+#include "ttail.h"
2 2
 
3 3
 ttail_t *ttail_init(int argc, char **argv)
4 4
 {
@@ -15,7 +15,6 @@ ttail_t *ttail_init(int argc, char **argv)
15 15
 	opterr = 0;
16 16
 	res->verbose = 0;
17 17
 	res->fmt = NULL;
18
-	regfree(&(res->date_prefix));
19 18
 	res->date_prefix_flag = 0;
20 19
 	res->logfile = NULL;
21 20
 	res->logfile_name = NULL;
@@ -96,10 +95,10 @@ int ttail_add_logfile(ttail_t* res, const char* filename)
96 95
 		res->logfile = tmp;
97 96
 		goto ttail_add_logfile_fpalloc_err;
98 97
 	}
99
-	fp = fopen(optarg, "r");
98
+	fp = fopen(filename, "r");
100 99
 	if(!fp)
101 100
 	{
102
-		fprintf(stderr, "Unable to open file : %s", filename);
101
+		fprintf(stderr, "Unable to open file : %s\n", filename);
103 102
 	}
104 103
 	res->logfile[res->logfile_sz-1] = fp;
105 104
 
@@ -189,5 +188,6 @@ void ttail_free(ttail_t* t)
189 188
 		free(t->fmt);
190 189
 	}
191 190
 	free(t);
191
+	optind = 0;
192 192
 }
193 193
 

tests/ttail_init_check.c → tests/ttail_argparse_check.c 查看文件


Loading…
取消
儲存