usr.bin/make fixes for var.c and some doc fixes

看板DFBSD_submit作者時間21年前 (2004/11/19 09:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
This is a multi-part message in MIME format. --------------000709060104060605050104 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Stuff contained in patch-4.21 ============================= PatchSet 294 o Fix proto type PatchSet 295 Date: 2002/10/29 09:48:49 Author: ru o Mention that the left-hand side of the comparison conditional must always be a variable expansion. Do not lie that debugging .for loops is a no-op. PatchSet 297 o Update tutorial. PatchSet 298 Date: 2002/11/01 08:40:32 Author: ru o Update man page. PatchSet 305 Date: 2002/12/23 16:04:51 Author: ru o Fixed the abuses of .Ql visible on stderr in troff mode. PatchSet 307 Date: 2002/12/30 21:18:11 Author: schweikh o Fix typos, mostly s/ an / a / where appropriate and a few s/an/and/ Add FreeBSD Id tag where missing. Stuff contained in patch-4.22 ============================== PatchSet 289 Date: 2002/10/23 02:57:33 Author: jmallett o De-obfuscate and correct the include path handling for SysV style includes. PatchSet 291 Date: 2002/10/24 05:10:55 Author: jmallett o Duplicate the variable name in the v->name field, as otherwise it points to data that will be modified. And do the appropriate thing now and free the v->name buffer along with other relinquished memory. XXX There is duplication here of destroying a Var, which is probably bogus, and probably missed in a few places. PatchSet 292 & 293 Date: 2002/10/24 13:57:42 Author: jmallett o When expanding a specific [1-char] variable, only expand said specific [1-char] variable. Don't just automatically expand something which starts with that character. PatchSet 308 & 309 Date: 2003/01/15 22:36:15 Author: marcel o Change the handling of non-anchored global substitutions of the empty string from a silent implicit non-global substitution to a non-silent explicit fatal error. Archored substitutions are those containing '^' or '$'. The problem with changing the substitution to prevent an infinite number of matches is that it doesn't provide the necessary feedback to the user that there's a bug in the/a makefile. Reporting the bug without making the condition fatal makes the feedback mostly useless due to the way that make fails to prefix the error with program name, makefile file name and line number information. Note that global substitutions of the empty string anchored with '^' (start of string) or '$' (end of string) do not cause an infinite number of matches and are therefore not reported and hence are non- fatal. --------------000709060104060605050104 Content-Type: text/plain; name="patch-4.21" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch-4.21" --------------------- PatchSet 289 Date: 2002/10/23 02:57:33 Author: jmallett Log: De-obfuscate and correct the include path handling for SysV style includes. PR: 32759 Submitted by: Mark Valentine Reviewed by: Matthew Emmerton" <matt@gsicomp.on.ca> MFC after: 15 days Members: parse.c:1.48->1.49 Index: parse.c =================================================================== RCS file: /usr/home/okumoto/Work/make/fbsd-cvs/src/usr.bin/make/parse.c,v retrieving revision 1.48 retrieving revision 1.49 diff -u -r1.48 -r1.49 --- parse.c 9 Oct 2002 03:42:10 -0000 1.48 +++ parse.c 23 Oct 2002 01:57:33 -0000 1.49 @@ -1823,7 +1823,6 @@ char *fullname; /* full pathname of file */ IFile *oldFile; /* state associated with current file */ char *cp; /* current position in file spec */ - char *prefEnd; /* * Skip over whitespace @@ -1855,42 +1854,12 @@ /* * Now we know the file's name, we attempt to find the durn thing. - * A return of NULL indicates the file don't exist. - * - * Include files are first searched for relative to the including - * file's location. We don't want to cd there, of course, so we - * just tack on the old file's leading path components and call - * Dir_FindFile to see if we can locate the beast. - * XXX - this *does* search in the current directory, right? + * Search for it first on the -I search path, then on the .PATH + * search path, if not found in a -I directory. */ - - prefEnd = strrchr (fname, '/'); - if (prefEnd != (char *)NULL) { - char *newName; - - *prefEnd = '\0'; - newName = str_concat (fname, file, STR_ADDSLASH); - fullname = Dir_FindFile (newName, parseIncPath); - if (fullname == (char *)NULL) { - fullname = Dir_FindFile(newName, dirSearchPath); - } - free (newName); - *prefEnd = '/'; - } else { - fullname = (char *)NULL; - } - + fullname = Dir_FindFile (file, parseIncPath); if (fullname == (char *)NULL) { - /* - * System makefile or makefile wasn't found in same directory as - * included makefile. Search for it first on the -I search path, - * then on the .PATH search path, if not found in a -I directory. - * XXX: Suffix specific? - */ - fullname = Dir_FindFile (file, parseIncPath); - if (fullname == (char *)NULL) { - fullname = Dir_FindFile(file, dirSearchPath); - } + fullname = Dir_FindFile(file, dirSearchPath); } if (fullname == (char *)NULL) { --------------------- PatchSet 291 Date: 2002/10/24 05:10:55 Author: jmallett Log: Duplicate the variable name in the v->name field, as otherwise it points to data that will be modified. And do the appropriate thing now and free the v->name buffer along with other relinquished memory. XXX There is duplication here of destroying a Var, which is probably bogus, and probably missed in a few places. Members: var.c:1.35->1.36 Index: var.c =================================================================== RCS file: /usr/home/okumoto/Work/make/fbsd-cvs/src/usr.bin/make/var.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -r1.35 -r1.36 --- var.c 9 Oct 2002 03:42:10 -0000 1.35 +++ var.c 24 Oct 2002 04:10:55 -0000 1.36 @@ -1631,7 +1631,7 @@ * so kludge up a Var structure for the modifications */ v = (Var *) emalloc(sizeof(Var)); - v->name = &str[1]; + v->name = estrdup(str); v->val = Buf_Init(1); v->flags = VAR_JUNK; } @@ -2201,6 +2201,7 @@ */ *freePtr = TRUE; } + free(v->name); Buf_Destroy(v->val, destroy); free(v); } else if (v->flags & VAR_JUNK) { @@ -2212,6 +2213,7 @@ free(str); } *freePtr = FALSE; + free(v->name); Buf_Destroy(v->val, TRUE); free(v); if (dynamic) { --------------------- PatchSet 292 Date: 2002/10/24 13:57:42 Author: jmallett Log: When expanding a specific [1-char] variable, only expand said specific [1-char] variable. Don't just automatically expand something which starts with that character. Obtained from: OpenBSD [3 years ago!] Members: var.c:1.36->1.37 Index: var.c =================================================================== RCS file: /usr/home/okumoto/Work/make/fbsd-cvs/src/usr.bin/make/var.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- var.c 24 Oct 2002 04:10:55 -0000 1.36 +++ var.c 24 Oct 2002 12:57:42 -0000 1.37 @@ -2281,7 +2281,7 @@ int expand; for (;;) { if (str[1] != '(' && str[1] != '{') { - if (str[1] != *var) { + if (str[1] != *var || val[1] != '\0') { Buf_AddBytes(buf, 2, (Byte *) str); str += 2; expand = FALSE; --------------------- PatchSet 293 Date: 2002/10/24 21:37:58 Author: jmallett Log: Fix problem with my ability to tell the difference between 'r' and 'l'... We want to check var[1], not val[1]. Submitted by: Mark Valentine <mark@thuvia.demon.co.uk> Pointed out by: sam Pointy hat to: jmallett Members: var.c:1.37->1.38 Index: var.c =================================================================== RCS file: /usr/home/okumoto/Work/make/fbsd-cvs/src/usr.bin/make/var.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -r1.37 -r1.38 --- var.c 24 Oct 2002 12:57:42 -0000 1.37 +++ var.c 24 Oct 2002 20:37:58 -0000 1.38 @@ -2281,7 +2281,7 @@ int expand; for (;;) { if (str[1] != '(' && str[1] != '{') { - if (str[1] != *var || val[1] != '\0') { + if (str[1] != *var || var[1] != '\0') { Buf_AddBytes(buf, 2, (Byte *) str); str += 2; expand = FALSE; --------------------- PatchSet 308 Date: 2003/01/13 23:53:46 Author: marcel Log: Prevent infinite substitution of the empty string by forcing non- global substitution. In general it's a makefile bug to globally substitute the empty string, but it's a bug in make(1) if a bug in the makefile yields an infinite running time of make(1). Not objected to by: arch@ Members: var.c:1.40->1.41 Index: var.c =================================================================== RCS file: /usr/home/okumoto/Work/make/fbsd-cvs/src/usr.bin/make/var.c,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- var.c 8 Nov 2002 16:59:11 -0000 1.40 +++ var.c 13 Jan 2003 23:53:46 -0000 1.41 @@ -1349,6 +1349,17 @@ cp++; } + /* + * Replacing the empty string for something else when + * done globally causes an infinite loop. The only + * meaningful substitution of the empty string would + * be those anchored by '^' or '$'. Thus, we can + * safely turn the substitution into a non-global one + * if the LHS is the empty string. + */ + if (pattern.leftLen == 0) + pattern.flags &= ~VAR_SUB_GLOBAL; + termc = *cp; newStr = VarModify(str, VarSubstitute, (void *)&pattern); --------------------- PatchSet 309 Date: 2003/01/15 22:36:15 Author: marcel Log: Change the handling of non-anchored global substitutions of the empty string from a silent implicit non-global substitution to a non-silent explicit fatal error. Archored substitutions are those containing '^' or '$'. The problem with changing the substitution to prevent an infinite number of matches is that it doesn't provide the necessary feedback to the user that there's a bug in the/a makefile. Reporting the bug without making the condition fatal makes the feedback mostly useless due to the way that make fails to prefix the error with program name, makefile file name and line number information. Note that global substitutions of the empty string anchored with '^' (start of string) or '$' (end of string) do not cause an infinite number of matches and are therefore not reported and hence are non- fatal. Suggested by: bde Tested with: buildworld Members: var.c:1.41->1.42 Index: var.c =================================================================== RCS file: /usr/home/okumoto/Work/make/fbsd-cvs/src/usr.bin/make/var.c,v retrieving revision 1.41 retrieving revision 1.42 diff -u -r1.41 -r1.42 --- var.c 13 Jan 2003 23:53:46 -0000 1.41 +++ var.c 15 Jan 2003 22:36:15 -0000 1.42 @@ -1350,15 +1350,16 @@ } /* - * Replacing the empty string for something else when - * done globally causes an infinite loop. The only - * meaningful substitution of the empty string would - * be those anchored by '^' or '$'. Thus, we can - * safely turn the substitution into a non-global one - * if the LHS is the empty string. + * Global substitution of the empty string causes an + * infinite number of matches, unless anchored by '^' + * (start of string) or '$' (end of string). Catch the + * infinite substitution here. + * Note that flags can only contain the 3 bits we're + * interested in so we don't have to mask unrelated + * bits. We can test for equality. */ - if (pattern.leftLen == 0) - pattern.flags &= ~VAR_SUB_GLOBAL; + if (!pattern.leftLen && pattern.flags == VAR_SUB_GLOBAL) + Fatal("Global substitution of the empty string"); termc = *cp; newStr = VarModify(str, VarSubstitute, --------------000709060104060605050104 Content-Type: text/plain; name="patch-4.22" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch-4.22" --------------------- PatchSet 294 Date: 2002/10/28 23:33:57 Author: jmallett Log: Split var.c into var.c and var_modify.c and move all the modification funcs to var_modify.c, for readability. constify some low hanging fruit (string manipulation functions) and the upper layers appropriately. No longer use the private strstr(3) implementation, while changing string code. Tested by: lots of successful make buildworld. Members: Makefile:1.29->1.30 job.c:1.46->1.47 nonints.h:1.18->1.19 var.c:1.38->1.39 var.h:INITIAL->1.1 var_modify.c:INITIAL->1.1 diff -ru dfly-src/make/nonints.h fbsd-src/make/nonints.h --- dfly-src/make/nonints.h Wed Nov 17 03:15:19 2004 +++ fbsd-src/make/nonints.h Wed Nov 17 03:15:17 2004 @@ -94,7 +94,7 @@ char *str_concat(const char *, const char *, int); char **brk_string(char *, int *, Boolean); int Str_Match(const char *, const char *); -const char *Str_SYSVMatch(const char *, const char *, int *len); +const char *Str_SYSVMatch(const char *, const char *, int *); void Str_SYSVSubst(Buffer, const char *, const char *, int); /* suff.c */ diff -ru dfly-src/make/var.c fbsd-src/make/var.c diff -ru dfly-src/make/var.c fbsd-src/make/var.c diff -ru dfly-src/make/var_modify.c fbsd-src/make/var_modify.c diff -ru dfly-src/make/var_modify.c fbsd-src/make/var_modify.c --------------------- PatchSet 295 Date: 2002/10/29 09:48:49 Author: ru Log: Mention that the left-hand side of the comparison conditional must always be a variable expansion. Obtained from: PMake Do not lie that debugging .for loops is a no-op. Members: make.1:1.59->1.60 Index: make.1 =================================================================== RCS file: /usr/home/okumoto/Work/make/fbsd-cvs/src/usr.bin/make/make.1,v retrieving revision 1.59 retrieving revision 1.60 diff -u -r1.59 -r1.60 --- make.1 27 Sep 2002 09:21:07 -0000 1.59 +++ make.1 29 Oct 2002 09:48:49 -0000 1.60 @@ -116,8 +116,6 @@ Print debugging information about directory searching and caching. .It Ar f Print debugging information about the execution of for loops. -Currently a -no-op. .It Ar "g1" Print the input graph before making anything. .It Ar "g2" @@ -902,7 +900,8 @@ .Pp An .Ar expression -may also be an arithmetic or string comparison. +may also be an arithmetic or string comparison, with the left-hand side +being a variable expansion. Variable expansion is performed on both sides of the comparison, after which the integral values are compared. --------------------- PatchSet 297 Date: 2002/10/29 14:56:09 Author: ru Log: bsd.doc.mk changes: Don't gratuitously pipe thru a cat(1) if NODOCCOMPRESS. Only create _stamp.extra when necessary. Get rid of SOELIMPP and OBJS. Use Groff version of soelim(1); we need its -I option for the following to work. Don't needlessly chdir to SRCDIR. Only a few documents need CD_HACK, and those that need it either use refer(1) or .PSPIC macro which internally uses the .psbb call. Members: PSD.doc/tutorial.ms:1.12->1.13 Index: PSD.doc/tutorial.ms =================================================================== RCS file: /usr/home/okumoto/Work/make/fbsd-cvs/src/usr.bin/make/PSD.doc/tutorial.ms,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- PSD.doc/tutorial.ms 16 May 2002 02:19:09 -0000 1.12 +++ PSD.doc/tutorial.ms 29 Oct 2002 14:56:09 -0000 1.13 @@ -37,7 +37,6 @@ .\" @(#)tutorial.ms 8.1 (Berkeley) 8/18/93 .\" $FreeBSD$ .\" -.so stubs .EH 'PSD:12-%''PMake \*- A Tutorial' .OH 'PMake \*- A Tutorial''PSD:12-%' .\" xH is a macro to provide numbered headers that are automatically stuffed --------------------- PatchSet 298 Date: 2002/11/01 08:40:32 Author: ru Log: Document the confusing behavior that the .if conditional defaults to defined(), e.g., ``.if 1'' is equivalent to ``.if defined(1)'', which is only true when the ${1} variable is defined. Members: make.1:1.60->1.61 Index: make.1 =================================================================== RCS file: /usr/home/okumoto/Work/make/fbsd-cvs/src/usr.bin/make/make.1,v retrieving revision 1.60 retrieving revision 1.61 diff -u -r1.60 -r1.61 --- make.1 29 Oct 2002 09:48:49 -0000 1.60 +++ make.1 1 Nov 2002 08:40:32 -0000 1.61 @@ -928,6 +928,7 @@ .Dq defined expression is applied to it, depending on the form of the conditional. If the form is +.Ql Ic .if , .Ql Ic .ifdef or .Ql Ic .ifndef , --------------------- PatchSet 305 Date: 2002/12/23 16:04:51 Author: ru Log: Fixed the abuses of .Ql visible on stderr in troff mode. PR: docs/37176 Members: make.1:1.61->1.62 Index: make.1 =================================================================== RCS file: /usr/home/okumoto/Work/make/fbsd-cvs/src/usr.bin/make/make.1,v retrieving revision 1.61 retrieving revision 1.62 diff -u -r1.61 -r1.62 --- make.1 1 Nov 2002 08:40:32 -0000 1.61 +++ make.1 23 Dec 2002 16:04:51 -0000 1.62 @@ -62,16 +62,16 @@ describing dependency relationships between the generation of files and programs. The first of -.Ql Pa BSDmakefile , -.Ql Pa makefile +.Pa BSDmakefile , +.Pa makefile and -.Ql Pa Makefile +.Pa Makefile that can be found in either the current directory or a special object directory (see -.Ql Va .OBJDIR ) +.Va .OBJDIR ) will be read for this list of specifications. If the file -.Ql Pa .depend +.Pa .depend can be found, it is also read (see .Xr mkdep 1 ) . .Pp @@ -145,13 +145,13 @@ makefiles for all variables. .It Fl f Ar makefile Specify a makefile to read instead of the default -.Ql Pa makefile +.Pa makefile and -.Ql Pa Makefile . +.Pa Makefile . If .Ar makefile is -.Ql \- , +.Sq Fl , standard input is read. Multiple makefiles may be specified, and are read in the order specified. .It Fl I Ar directory @@ -162,7 +162,7 @@ .It Fl i Ignore non-zero exit of shell commands in the makefile. Equivalent to specifying -.Ql \- +.Sq Ic \- before each command line in the makefile. .It Fl j Ar max_jobs Specify the maximum number of jobs that @@ -208,7 +208,7 @@ .It Fl s Do not echo any commands as they are executed. Equivalent to specifying -.Ql Ic @ +.Sq Ic @ before each command line in the makefile. .It Fl t Rather than re-building a target as specified in the makefile, create it @@ -311,19 +311,19 @@ be preceded by a tab. While any target may appear on a dependency line, only one of these dependencies may be followed by a creation script, unless the -.Ql Ic :: +.Sq Ic :: operator is used. .Pp If the first or first two characters of the command line are -.Ql Ic @ +.Sq Ic @ and/or -.Ql Ic \- , +.Sq Ic \- , the command is treated specially. A -.Ql Ic @ +.Sq Ic @ causes the command not to be echoed before it is executed. A -.Ql Ic \- +.Sq Ic \- causes any non-zero exit status of the command line to be ignored. .Sh VARIABLE ASSIGNMENTS Variables in @@ -390,51 +390,51 @@ .Bl -tag -width ".ARCHIVE" .It Va .ALLSRC The list of all sources for this target; also known as -.Ql Va \&> . +.Sq Va \&> . .It Va .ARCHIVE The name of the archive file; also known as -.Ql Va \&! . +.Sq Va \&! . .It Va .IMPSRC The name/path of the source from which the target is to be transformed (the .Dq implied source); also known as -.Ql Va \&< . +.Sq Va \&< . .It Va .MEMBER The name of the archive member; also known as -.Ql Va \&% . +.Sq Va \&% . .It Va .OODATE The list of sources for this target that were deemed out-of-date; also known as -.Ql Va \&? . +.Sq Va \&? . .It Va .PREFIX The file prefix of the file, containing only the file portion, no suffix or preceding directory components; also known as -.Ql Va * . +.Sq Va * . .It Va .TARGET The name of the target; also known as -.Ql Va @ . +.Sq Va @ . .El .Pp The shorter forms -.Ql Va @ , -.Ql Va \&! , -.Ql Va \&< , -.Ql Va \&% , -.Ql Va \&? , -.Ql Va \&> , +.Sq Va @ , +.Sq Va \&! , +.Sq Va \&< , +.Sq Va \&% , +.Sq Va \&? , +.Sq Va \&> , and -.Ql Va * +.Sq Va * are permitted for backward compatibility and are not recommended. The six variables -.Ql Va "@F" , -.Ql Va "@D" , -.Ql Va "<F" , -.Ql Va "<D" , -.Ql Va "*F" , +.Sq Va @F , +.Sq Va @D , +.Sq Va <F , +.Sq Va <D , +.Sq Va *F , and -.Ql Va "*D" +.Sq Va *D are permitted for compatibility with .At V @@ -443,11 +443,11 @@ Four of the local variables may be used in sources on dependency lines because they expand to the proper value for each target on the line. These variables are -.Ql Va .TARGET , -.Ql Va .PREFIX , -.Ql Va .ARCHIVE , +.Va .TARGET , +.Va .PREFIX , +.Va .ARCHIVE , and -.Ql Va .MEMBER . +.Va .MEMBER . .El .Pp In addition, @@ -636,7 +636,7 @@ .Pf ( Ql * , .Ql \&? , and -.Ql Op ) +.Ql [] ) may be used. The wildcard characters may be escaped with a backslash @@ -802,45 +802,45 @@ .Op Ar operator expression ... .Xc A combination of -.Ql Ic .else +.Ic .else followed by -.Ql Ic .if . +.Ic .if . .It Xo .Ic .elifdef .Oo \&! Oc Ns Ar variable .Op Ar operator variable ... .Xc A combination of -.Ql Ic .else +.Ic .else followed by -.Ql Ic .ifdef . +.Ic .ifdef . .It Xo .Ic .elifndef .Oo \&! Oc Ns Ar variable .Op Ar operator variable ... .Xc A combination of -.Ql Ic .else +.Ic .else followed by -.Ql Ic .ifndef . +.Ic .ifndef . .It Xo .Ic .elifmake .Oo \&! Oc Ns Ar target .Op Ar operator target ... .Xc A combination of -.Ql Ic .else +.Ic .else followed by -.Ql Ic .ifmake . +.Ic .ifmake . .It Xo .Ic .elifnmake .Oo \&! Oc Ns Ar target .Op Ar operator target ... .Xc A combination of -.Ql Ic .else +.Ic .else followed by -.Ql Ic .ifnmake . +.Ic .ifnmake . .It Ic .endif End the body of the conditional. .El @@ -852,11 +852,11 @@ .It Cm \&|\&| logical .Tn OR -.It Cm \&&& +.It Cm && Logical .Tn AND ; of higher precedence than -.Ql Ic || . +.Sq Ic || . .El .Pp As in C, @@ -865,11 +865,11 @@ its value. Parentheses may be used to change the order of evaluation. The boolean operator -.Ql Ic !\& +.Sq Ic !\& may be used to logically negate an entire conditional. It is of higher precedence than -.Ql Ic \&&& . +.Sq Ic && . .Pp The value of .Ar expression @@ -910,9 +910,9 @@ The standard C relational operators are all supported. If after variable expansion, either the left or right hand side of a -.Ql Ic == +.Sq Ic == or -.Ql Ic "!=" +.Sq Ic != operator is not an integral value, then string comparison is performed between the expanded variables. @@ -928,17 +928,17 @@ .Dq defined expression is applied to it, depending on the form of the conditional. If the form is -.Ql Ic .if , -.Ql Ic .ifdef +.Ic .if , +.Ic .ifdef or -.Ql Ic .ifndef , +.Ic .ifndef , the .Dq defined expression is applied. Similarly, if the form is -.Ql Ic .ifmake +.Ic .ifmake or -.Ql Ic .ifnmake , +.Ic .ifnmake , the .Dq make expression is applied. @@ -947,9 +947,9 @@ as before. If it evaluates to false, the following lines are skipped. In both cases this continues until a -.Ql Ic .else +.Ic .else or -.Ql Ic .endif +.Ic .endif is found. .Pp For loops are typically used to apply a set of rules to a list of files. --------------------- PatchSet 307 Date: 2002/12/30 21:18:11 Author: schweikh Log: Fix typos, mostly s/ an / a / where appropriate and a few s/an/and/ Add FreeBSD Id tag where missing. Members: suff.c:1.27->1.28 Index: suff.c =================================================================== RCS file: /usr/home/okumoto/Work/make/fbsd-cvs/src/usr.bin/make/suff.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- suff.c 23 Oct 2002 23:16:43 -0000 1.27 +++ suff.c 30 Dec 2002 21:18:11 -0000 1.28 @@ -1031,7 +1031,7 @@ * Free all src structures in list that don't have a reference count * * Results: - * Ture if an src was removed + * True if a src was removed * * Side Effects: * The memory is free'd. --------------000709060104060605050104--
文章代碼(AID): #11dKqN00 (DFBSD_submit)