From 55f7e0cf3aa4d25e8c0b84f1eb98b514a7160818 Mon Sep 17 00:00:00 2001 From: dkf Date: Mon, 9 Nov 2009 11:56:56 +0000 Subject: Some code consolidation (don't scatter deletion code where unnecessary). --- ChangeLog | 43 ++++++++------ generic/tkFileFilter.c | 154 ++++++++++++++----------------------------------- 2 files changed, 67 insertions(+), 130 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1f91197..99d5152 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-11-09 Donal K. Fellows + + * generic/tkFileFilter.c (TkFreeFileFilters): Simplify the code in + this file by consolidating the deletion code together into a single + function rather than scattering it over four. + 2009-11-01 Joe Mistachkin * win/tkWinButton.c: [Bug 1739613]: The default width being stored @@ -7,28 +13,27 @@ 2009-11-01 Joe Mistachkin - * doc/loadTk.n: minor fix for htmlhelp target. + * doc/loadTk.n: Minor fix for htmlhelp target. 2009-11-01 Joe English - * generic/ttk/ttkWidget.c, doc/ttk_widget.n: - Uniform, extensible syntax for [$w identify] methods: - [$w identify $component $x $y]. All ttk::* widgets support - [$w identify element $x $y]; widgets with other + * generic/ttk/ttkWidget.c, doc/ttk_widget.n: Uniform, extensible + syntax for [$w identify] methods: [$w identify $component $x $y]. All + ttk::* widgets support [$w identify element $x $y]; widgets with other identifiable parts may have additional subcommands. - * generic/ttk/ttkNotebook.c, doc/ttk_notebook.n: - Notebook widgets support [$nb identify tab]. - * generic/ttk/ttkPanedwindow.c, doc/ttk_panedwindow.n: - Panedwindow widgets support [$w identify sash]. - Older 2-argument form [$w identify $x $y] still supported, - though it does different things depending on the widget. + * generic/ttk/ttkNotebook.c, doc/ttk_notebook.n: Notebook widgets + support [$nb identify tab]. + * generic/ttk/ttkPanedwindow.c, doc/ttk_panedwindow.n: Panedwindow + widgets support [$w identify sash]. Older 2-argument form [$w + identify $x $y] still supported, though it does different things + depending on the widget. 2009-10-29 Pat Thoyts * win/tkWinFont.c: [Bug 1825353]: This patch reverts a previous - attempt to fix tiny fonts on Russian Windows. It fixes the - issue by requesting a suitable fixed font instead of decoding the - system stock font. + attempt to fix tiny fonts on Russian Windows. It fixes the issue by + requesting a suitable fixed font instead of decoding the system stock + font. 2009-10-26 Don Porter @@ -54,18 +59,18 @@ 2009-10-22 Donal K. Fellows * generic/tkText.c (CreateWidget, TextEditUndo, TextEditRedo) - (TextEditCmd, UpdateDirtyFlag): + (TextEditCmd, UpdateDirtyFlag): * generic/tkText.h: [Patch 1469210]: Corrected handling of marking as dirty when inserting after an undo from a non-dirty state. * win/tkWinDialog.c (GetFileNameA): Make the handling of the filter index the same as in GetFileNameW. - * library/tkfbox.tcl (::tk::dialog::file::, Done): + * library/tkfbox.tcl (::tk::dialog::file::, Done): * library/xmfbox.tcl (MotifFDialog_FileTypes) - (MotifFDialog_ActivateSEnt): - * macosx/tkMacOSXDialog.c (Tk_GetOpenFileObjCmd): - * win/tkWinDialog.c (GetFileNameW, GetFileNameA): + (MotifFDialog_ActivateSEnt): + * macosx/tkMacOSXDialog.c (Tk_GetOpenFileObjCmd): + * win/tkWinDialog.c (GetFileNameW, GetFileNameA): * doc/getOpenFile.n: [Patch 2168768]: Corrected handling of the -typevariable option to be consistently global; it's the only way it can work even close to the same on all platforms. diff --git a/generic/tkFileFilter.c b/generic/tkFileFilter.c index 4e355d4..b8e8101 100644 --- a/generic/tkFileFilter.c +++ b/generic/tkFileFilter.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkFileFilter.c,v 1.12 2008/12/07 16:34:12 das Exp $ + * RCS: @(#) $Id: tkFileFilter.c,v 1.13 2009/11/09 11:56:57 dkf Exp $ */ #include "tkInt.h" @@ -18,9 +18,6 @@ static int AddClause(Tcl_Interp *interp, FileFilter *filterPtr, Tcl_Obj *patternsObj, Tcl_Obj *ostypesObj, int isWindows); -static void FreeClauses(FileFilter *filterPtr); -static void FreeGlobPatterns(FileFilterClause *clausePtr); -static void FreeMacFileTypes(FileFilterClause *clausePtr); static FileFilter * GetFilter(FileFilterList *flistPtr, const char *name); /* @@ -89,7 +86,7 @@ TkGetFileFilters( int i; if (types == NULL) { - return TCL_OK; + return TCL_OK; } if (Tcl_ListObjGetElements(interp, types, &listObjc, @@ -105,6 +102,7 @@ TkGetFileFilters( * the -filefilters option may have been used more than once in the * command line. */ + TkFreeFileFilters(flistPtr); for (i = 0; ifilters; filterPtr != NULL; ) { + for (clausePtr = filterPtr->clauses; clausePtr != NULL; ) { + /* + * Squelch each of the glob patterns. + */ + + for (globPtr = clausePtr->patterns; globPtr != NULL; ) { + ckfree(globPtr->pattern); + toFree = globPtr; + globPtr = globPtr->next; + ckfree(toFree); + } + + /* + * Squelch each of the Mac file type codes. + */ + + for (mfPtr = clausePtr->macTypes; mfPtr != NULL; ) { + toFree = mfPtr; + mfPtr = mfPtr->next; + ckfree(toFree); + } + toFree = clausePtr; + clausePtr = clausePtr->next; + ckfree(toFree); + } + + /* + * Squelch the name of the filter and the overall structure. + */ - filterPtr=flistPtr->filters; - while (filterPtr != NULL) { + ckfree(filterPtr->name); toFree = filterPtr; filterPtr = filterPtr->next; - FreeClauses(toFree); - ckfree(toFree->name); - ckfree((char *) toFree); + ckfree(toFree); } flistPtr->filters = NULL; } @@ -417,8 +447,8 @@ GetFilter( filterPtr = (FileFilter *) ckalloc(sizeof(FileFilter)); filterPtr->clauses = NULL; filterPtr->clausesTail = NULL; - len = (strlen(name) + 1) * sizeof(char); - filterPtr->name = ckalloc(len); + len = strlen(name) + 1; + filterPtr->name = ckalloc((unsigned) len); memcpy(filterPtr->name, name, len); if (flistPtr->filters == NULL) { @@ -434,104 +464,6 @@ GetFilter( } /* - *---------------------------------------------------------------------- - * - * FreeClauses -- - * - * Frees the malloc'ed file type clause. - * - * Results: - * None. - * - * Side effects: - * The list of clauses in filterPtr->clauses are freed. - * - *---------------------------------------------------------------------- - */ - -static void -FreeClauses( - FileFilter *filterPtr) /* FileFilter whose clauses are to be freed */ -{ - FileFilterClause *clausePtr = filterPtr->clauses; - - while (clausePtr != NULL) { - FileFilterClause *toFree = clausePtr; - - clausePtr = clausePtr->next; - FreeGlobPatterns(toFree); - FreeMacFileTypes(toFree); - ckfree((char *) toFree); - } - filterPtr->clauses = NULL; - filterPtr->clausesTail = NULL; -} - -/* - *---------------------------------------------------------------------- - * - * FreeGlobPatterns -- - * - * Frees the malloc'ed glob patterns in a clause - * - * Results: - * None. - * - * Side effects: - * The list of glob patterns in clausePtr->patterns are freed. - * - *---------------------------------------------------------------------- - */ - -static void -FreeGlobPatterns( - FileFilterClause *clausePtr)/* The clause whose patterns are to be freed*/ -{ - GlobPattern *globPtr = clausePtr->patterns; - - while (globPtr != NULL) { - GlobPattern *toFree = globPtr; - globPtr = globPtr->next; - - ckfree(toFree->pattern); - ckfree((char *) toFree); - } - clausePtr->patterns = NULL; -} - -/* - *---------------------------------------------------------------------- - * - * FreeMacFileTypes -- - * - * Frees the malloc'ed Mac file types in a clause - * - * Results: - * None. - * - * Side effects: - * The list of Mac file types in clausePtr->macTypes are freed. - * - *---------------------------------------------------------------------- - */ - -static void -FreeMacFileTypes( - FileFilterClause *clausePtr)/* The clause whose mac types are to be - * freed. */ -{ - MacFileType *mfPtr = clausePtr->macTypes; - - while (mfPtr != NULL) { - MacFileType *toFree = mfPtr; - - mfPtr = mfPtr->next; - ckfree((char *) toFree); - } - clausePtr->macTypes = NULL; -} - -/* * Local Variables: * mode: c * c-basic-offset: 4 -- cgit v0.12