annotate lib-src/profile.c @ 69215:ef5cd9601f14

(mh-folder-list): Fix problem with passing in a folder and getting nothing back. Fix problem with passing in empty string and getting the entire filesystem (or infinite loop). Don't append slash to folder. These fixes fix problems observed with the pick search. Thanks to Thomas Baumann for the help (closes SF #1435381).
author Bill Wohler <wohler@newt.com>
date Tue, 28 Feb 2006 23:54:53 +0000
parents 3661e9b3c48f
children 6d19c76d81c5 c5406394f567
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 /* profile.c --- generate periodic events for profiling of Emacs Lisp code.
64769
6358e3c6075c Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64083
diff changeset
2 Copyright (C) 1992, 1994, 1999, 2002, 2003, 2004,
68647
3661e9b3c48f Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64769
diff changeset
3 2005, 2006 Free Software Foundation, Inc.
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 Author: Boaz Ben-Zvi <boaz@lcs.mit.edu>
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12723
diff changeset
7 This file is part of GNU Emacs.
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12723
diff changeset
9 GNU Emacs is free software; you can redistribute it and/or modify
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12723
diff changeset
10 it under the terms of the GNU General Public License as published by
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12723
diff changeset
11 the Free Software Foundation; either version 2, or (at your option)
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12723
diff changeset
12 any later version.
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12723
diff changeset
14 GNU Emacs is distributed in the hope that it will be useful,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12723
diff changeset
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12723
diff changeset
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12723
diff changeset
17 GNU General Public License for more details.
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12723
diff changeset
19 You should have received a copy of the GNU General Public License
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 12723
diff changeset
20 along with GNU Emacs; see the file COPYING. If not, write to
64083
23a17af379b1 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 55442
diff changeset
21 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
23a17af379b1 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 55442
diff changeset
22 Boston, MA 02110-1301, USA. */
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 /**
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ** To be run as an emacs process. Input string that starts with:
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ** 'z' -- resets the watch (to zero).
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 ** 'p' -- return time (on stdout) as string with format <sec>.<micro-sec>
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ** 'q' -- exit.
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 **
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 ** abstraction : a stopwatch
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 ** operations: reset_watch, get_time
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 */
39661
cbfae3e04e1c Include config.h, not ../src/config.h and systime.h, not ../src/systime.h.
Pavel Janík <Pavel@Janik.cz>
parents: 26083
diff changeset
34 #include <config.h>
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 #include <stdio.h>
39661
cbfae3e04e1c Include config.h, not ../src/config.h and systime.h, not ../src/systime.h.
Pavel Janík <Pavel@Janik.cz>
parents: 26083
diff changeset
36 #include <systime.h>
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37
9887
be7b66e2cb98 (TV1, TV2): Use EMACS_TIME as type.
Richard M. Stallman <rms@gnu.org>
parents: 9491
diff changeset
38 static EMACS_TIME TV1, TV2;
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 static int watch_not_started = 1; /* flag */
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 static char time_string[30];
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 /* Reset the stopwatch to zero. */
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43
9491
dd3b83e4ceb0 Eliminate some -Wall warnings.
David J. MacKenzie <djm@gnu.org>
parents: 8336
diff changeset
44 void
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45 reset_watch ()
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
46 {
8336
52590f967c1e (reset_watch, get_time): Use EMACS_GET_TIME.
Richard M. Stallman <rms@gnu.org>
parents: 6876
diff changeset
47 EMACS_GET_TIME (TV1);
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
48 watch_not_started = 0;
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
49 }
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51 /* This call returns the time since the last reset_watch call. The time
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 42439
diff changeset
52 is returned as a string with the format <seconds>.<micro-seconds>
6042
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
53 If reset_watch was not called yet, exit. */
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 char *
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 get_time ()
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 {
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
58 if (watch_not_started)
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
59 exit (EXIT_FAILURE); /* call reset_watch first ! */
8336
52590f967c1e (reset_watch, get_time): Use EMACS_GET_TIME.
Richard M. Stallman <rms@gnu.org>
parents: 6876
diff changeset
60 EMACS_GET_TIME (TV2);
9887
be7b66e2cb98 (TV1, TV2): Use EMACS_TIME as type.
Richard M. Stallman <rms@gnu.org>
parents: 9491
diff changeset
61 EMACS_SUB_TIME (TV2, TV2, TV1);
19337
bd0dd246f9cd (get_time): Cast arg to fprintf.
Richard M. Stallman <rms@gnu.org>
parents: 15683
diff changeset
62 sprintf (time_string, "%lu.%06lu", (unsigned long)EMACS_SECS (TV2), (unsigned long)EMACS_USECS (TV2));
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 return time_string;
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 }
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65
12723
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
66 #if ! defined (HAVE_GETTIMEOFDAY) && defined (HAVE_TIMEVAL)
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 39661
diff changeset
67
12723
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
68 /* ARGSUSED */
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
69 gettimeofday (tp, tzp)
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
70 struct timeval *tp;
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
71 struct timezone *tzp;
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
72 {
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
73 extern long time ();
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
74
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 39661
diff changeset
75 tp->tv_sec = time ((long *)0);
12723
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
76 tp->tv_usec = 0;
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
77 if (tzp != 0)
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
78 tzp->tz_minuteswest = -1;
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
79 }
42439
d8a417105504 Remove unnecessary whitespaces.
Pavel Janík <Pavel@Janik.cz>
parents: 39661
diff changeset
80
12723
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
81 #endif
48786c683506 (gettimeofday): New function, defined if necessary.
Richard M. Stallman <rms@gnu.org>
parents: 10087
diff changeset
82
15683
5f9426e991a3 Declare main as int, not void.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
83 int
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 main ()
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 {
6042
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
86 int c;
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
87 while ((c = getchar ()) != EOF)
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 {
6042
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
89 switch (c)
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 {
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 case 'z':
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 reset_watch ();
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 break;
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94 case 'p':
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
95 puts (get_time ());
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 break;
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 case 'q':
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
98 exit (EXIT_SUCCESS);
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 }
6042
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
100 /* Anything remaining on the line is ignored. */
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
101 while (c != '\n' && c != EOF)
5bffd741340e (main, get_time): Don't crash on invalid input.
Karl Heuer <kwzh@gnu.org>
parents: 6026
diff changeset
102 c = getchar ();
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 }
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
104 exit (EXIT_FAILURE);
5810
3fdb74f69f34 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
106
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
107 /* arch-tag: 8db68f7e-2322-4944-a315-dba349bdbf39
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
108 (do not change this comment) */
55442
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
109
a47704955f8d Throughout, replace 0 destined for `exit' arg with `EXIT_SUCCESS'.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 52401
diff changeset
110 /* profile.c ends here */