~ubuntu-branches/ubuntu/lucid/dpkg/lucid

« back to all changes in this revision

Viewing changes to lib/trigdeferred.l

  • Committer: Bazaar Package Importer
  • Author(s): Guillem Jover, Guillem Jover, Raphael Hertzog, Modestas Vainius, Updated dpkg translations, Updated dselect translations, Updated man page translations, Updated scripts translations
  • Date: 2009-09-06 09:37:45 UTC
  • mto: (1.4.1 squeeze)
  • mto: This revision was merged to the branch mainline in revision 68.
  • Revision ID: james.westby@ubuntu.com-20090906093745-orb3im04ozfxypis
Tags: 1.15.4
[ Guillem Jover ]
* Call _g instead of g_ in dpkg-name.
* Fix inverted logic when deciding to assume the architecture in dpkg-name
  when the package didn't have such field.
* Do not take into account Revision and Package_Revision fields in dpkg-name
  and dpkg-scanpackages as they have been handled already by “dpkg-deb -I”.
* Switch dpkg-scansources to use Dpkg::Cdata instead of duplicating the
  .dsc parsing code. As a side effect it now handles properly bogus files.
* Do not remap obsolete fields in dpkg-scanpackages as they have been
  handled already by “dpkg-deb -I”.
* Properly mark packages being purged for disappearance from the database.
  This will make the status database not be left behind with traces of old
  not-installed packages. Closes: #472208
* On parse mark not-installed leftover packages for automatic removal from
  the database on next dump. This obsoletes the --forget-old-unavail option,
  thus making it now a no-op. Closes: #33394, #429262
* Document “hold” under package selection states instead of flags in dpkg(1).
* Remove trailing ‘/’ and ‘/.’ from the directory name to be used as the
  package name on “dpkg-deb -b”. Closes: #218018, #373602
* Remove obsolete ‘hold’ and ‘hold-reinstreq’ internal status flags.
* Add fakeroot to dpkg-dev Recommends. Closes: #536821
* Fix an always false test when trying to decide which package to deselect
  to resolve a dependency problem in dselect.
* Add uClibc Linux support to ostable and triplettable. Closes: #455501
* Add uClinux support to ostable and triplettable.
  Thanks to Simon Richter <sjr@debian.org>.
* When aborting due to file conflicts print the version of the conflicted
  package. Closes: #540019
* Remove double slash in database path visible to the user in some error
  conditions.
* Stop macthing sparc64-*-* GNU triplets with sparc Debian architecture.
* Add support for config.d style directories in dpkg and dselect,
  (/etc/dpkg/dpkg.cfg.d and /etc/dpkg/dselect.cfg.d respectively).
* Define DPKG_MAINTSCRIPT_ARCH on the maintainer script environment to the
  architecture the package got built for.
* Document DPKG_MAINTSCRIPT_PACKAGE maintainer script environment variable
  in dpkg man page.
* Document DPKG_RUNNING_VERSION maintainer script environment variable
  in dpkg man page.
* Change po4a usage to not create unwated changes depending if doing out or
  in-tree builds.
* Use po4a “--previous” support when updating the man pages.
  Suggested by Christian Perrier <bubulle@debian.org>.
* On configuration error print file name and line number.
* Allow quoting values in configuration file options.
* Add new --pre-invoke and --post-invoke hooks in dpkg.
* Add new --control-path command to dpkg-query.
* Use ohshit on bad version syntax in --compare-versions.
* Add Multi-Arch to the list of known binary package fields for dpkg-dev.
  Thanks to Steve Langasek <vorlon@debian.org>.

[ Raphael Hertzog ]
* Replace install-info by a wrapper around GNU's install-info. The wrapper
  will be dropped in squeeze+1. dpkg now Breaks: old versions of
  info-browsers that do not depend on the new install-info package
  that provides the real functionality. Closes: #9771, #523980
  See http://wiki.debian.org/Transitions/DpkgToGnuInstallInfo for details.
* Fix dpkg's preinst in case /var/lib/dpkg/alternatives contains unexpected
  sub-directories. Closes: #535138
  And also when one of the file doesn't contain correct alternatives
  information (improper number of lines). Closes: #537558
* Upgrade Standards-Version to 3.8.2 (no changes).
* Update deb-substvars(5) to list fields that do not support substvars.
  Closes: #535353
* Fix dpkg-parsechangelog to include all entries with -v0 parameter.
  Closes: #537800
* Fix update-alternatives to mention the correct slave link that can't
  be installed due to a conflicting file instead of quoting the master link.
* Add support for extra override file in dpkg-scanpackages. Thanks to Robert
  Millan for the patch. Closes: #537559
* Add support for extra override file in dpkg-scansources.
* Document format of extra override file in a new manual page
  deb-extra-override(5).
* Update sample in dpkg-gensymbols(1) to give an accurate listing of
  64 bit arches. Thanks to Julien Cristau for the patch. Closes: #540382
* Create /etc/cron.daily/dpkg to handle the backup of
  /var/lib/dpkg/status in /var/backups. This is taken out of the cron
  package and need no conflicts/breaks as the code does nothing if
  the current status file is already backupped. Thanks to Leo 'costela'
  Antunes <costela@debian.org> for the patch. Closes: #541412
* Change behaviour of dpkg --merge-avail to not update a package's
  information if the version provided is older than the one already listed
  in the available file. Thanks to Ian Jackson
  <ian@davenant.greenend.org.uk> for the patch. Closes: #496114
* dpkg-architecture can now export DEB_{HOST,BUILD}_ARCH_{BITS,ENDIAN}
  (pointer size and endianness):
  - cputable (in dpkg) modified to contain those information
  - dpkg-dev depends on dpkg (>= 1.15.4) to ensure that we have an updated
    cputable (and so that a versioned build-dependency on dpkg-dev is enough
    to use this new feature)
  Closes: #531307
* Split overly long Binary: field values over multiple lines. This is
  allowed since policy 3.8.3. Closes: #494714
* Improve performance of dpkg-shlibdeps by caching minimal version
  associated to each library in Dpkg::Shlib::SymbolFile. Thanks to
  Jiří Paleček <jpalecek@web.de> for the patch.
* Slightly improve dpkg-source(1) by giving the section name that we're
  referring to. Closes: #544037
* Fix translation error in german manpage of dpkg-buildpackage. Thanks
  to Joachim Breitner <nomeata@debian.org>. Closes: #541829

[ Modestas Vainius ]
* Provide a meaningful label for dpkg-gensymbols diff.

[ Updated dpkg translations ]
* Asturian (Marcos Alvarez Costales). Closes: #535327
* French (Christian Perrier).
* German (Sven Joachim).
* Italian (Milo Casagrande). Closes: #536538
* Russian (Yuri Kozlov). Closes: #542254
* Slovak (Ivan Masár). Closes: #537742
* Swedish (Peter Krefting).

[ Updated dselect translations ]
* Russian (Yuri Kozlov). Closes: #542254
* Slovak (Ivan Masár). Closes: #537741

[ Updated man page translations ]
* French (Christian Perrier).
* German (Helge Kreutzmann), proofread by Jens Seidel.
* Swedish (Peter Krefting).

[ Updated scripts translations ]
* French completed (Christian Perrier).
* German (Helge Kreutzmann).
* Russian (Yuri Kozlov). Closes: #542254
* Swedish (Peter Krefting).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * dpkg - main program for package management
3
 
 * trigdeferred.l - parsing of triggers/Deferred
4
 
 *
5
 
 * Copyright © 2007 Canonical Ltd
6
 
 * written by Ian Jackson <ian@chiark.greenend.org.uk>
7
 
 *
8
 
 * This is free software; you can redistribute it and/or modify
9
 
 * it under the terms of the GNU General Public License as
10
 
 * published by the Free Software Foundation; either version 2,
11
 
 * or (at your option) any later version.
12
 
 *
13
 
 * This is distributed in the hope that it will be useful, but
14
 
 * WITHOUT ANY WARRANTY; without even the implied warranty of
15
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
 
 * GNU General Public License for more details.
17
 
 *
18
 
 * You should have received a copy of the GNU General Public
19
 
 * License along with dpkg; if not, write to the Free Software
20
 
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21
 
 */
22
 
 
23
 
%option prefix="trigdef_yy"
24
 
/* Reset the name to the default value (instead of using "trigdeferred.c")
25
 
 * so that automake (ylwrap) can find it. */
26
 
%option outfile="lex.yy.c"
27
 
%option noyywrap
28
 
%option batch
29
 
%option nodefault
30
 
%option perf-report
31
 
%option warn
32
 
%option nounput
33
 
 
34
 
%x midline
35
 
 
36
 
%{
37
 
 
38
 
#include <config.h>
39
 
 
40
 
#include <dpkg-i18n.h>
41
 
 
42
 
#include <sys/stat.h>
43
 
#include <sys/fcntl.h>
44
 
 
45
 
#include <dpkg.h>
46
 
#include <dpkg-db.h>
47
 
 
48
 
#define YY_NO_INPUT
49
 
 
50
 
static struct varbuf fn, newfn;
51
 
 
52
 
%}
53
 
 
54
 
%%
55
 
 
56
 
[ \t\n]         /* whitespace */
57
 
#.*\n           /* comments */
58
 
[\x21-\x7e]+    {
59
 
        trigdef->trig_begin(trigdef_yytext);
60
 
        BEGIN(midline);
61
 
        }
62
 
 
63
 
<midline>[ \t]  /* whitespace */
64
 
<midline>[-0-9a-z][-+.0-9a-z]*  {
65
 
        if (trigdef_yytext[0] == '-' && trigdef_yytext[1])
66
 
                ohshit(_("invalid package name `%.250s' in triggers deferred "
67
 
                         "file `%.250s'"), trigdef_yytext, fn.buf);
68
 
        trigdef->package(trigdef_yytext);
69
 
        }
70
 
<midline>\n|#.*\n       {
71
 
        trigdef->trig_end();
72
 
        BEGIN(0);
73
 
        }
74
 
<midline><<EOF>>        {
75
 
        ohshit(_("truncated triggers deferred file `%.250s'"), fn.buf);
76
 
        }
77
 
 
78
 
<*>.    {
79
 
        ohshit(_("syntax error in triggers deferred file `%.250s' at "
80
 
                 "character `%s'%s"),
81
 
               fn.buf, yytext, YY_START == midline ? " midline": "");
82
 
        }
83
 
 
84
 
%%
85
 
 
86
 
/*---------- Deferred file handling ----------*/
87
 
 
88
 
static int lock_fd = -1;
89
 
static FILE *old_deferred;
90
 
 
91
 
FILE *trig_new_deferred;
92
 
const struct trigdefmeths *trigdef;
93
 
 
94
 
static void
95
 
constructfn(struct varbuf *vb, const char *admindir, const char *tail)
96
 
{
97
 
        varbufreset(vb);
98
 
        varbufaddstr(vb, admindir);
99
 
        varbufaddstr(vb, "/" TRIGGERSDIR);
100
 
        varbufaddstr(vb, tail);
101
 
        varbufaddc(vb, 0);
102
 
}
103
 
 
104
 
int
105
 
trigdef_update_start(enum trigdef_updateflags uf, const char *admindir)
106
 
{
107
 
        struct stat stab;
108
 
        int r;
109
 
 
110
 
        if (uf & tduf_write) {
111
 
                constructfn(&fn, admindir, TRIGGERSLOCKFILE);
112
 
                if (lock_fd == -1) {
113
 
                        lock_fd = open(fn.buf, O_RDWR | O_CREAT | O_TRUNC, 0600);
114
 
                        if (lock_fd == -1) {
115
 
                                if (!(errno == ENOENT && (uf & tduf_nolockok)))
116
 
                                        ohshite(_("unable to open/create "
117
 
                                                  "triggers lockfile `%.250s'"),
118
 
                                                fn.buf);
119
 
                                return -1;
120
 
                        }
121
 
                }
122
 
 
123
 
                lock_file(&lock_fd, fn.buf, _("unable to lock triggers area"),
124
 
                          NULL);
125
 
        } else {
126
 
                /* Dummy for pop_cleanups. */
127
 
                push_cleanup(NULL, 0, NULL, 0, 0);
128
 
        }
129
 
 
130
 
        constructfn(&fn, admindir, TRIGGERSDEFERREDFILE);
131
 
        r = stat(fn.buf, &stab);
132
 
        if (r) {
133
 
                if (errno != ENOENT)
134
 
                        ohshite(_("unable to stat triggers deferred file `%.250s'"),
135
 
                                fn.buf);
136
 
        } else if (!stab.st_size) {
137
 
                if (!(uf & tduf_writeifempty)) {
138
 
                        pop_cleanup(ehflag_normaltidy);
139
 
                        return -2;
140
 
                }
141
 
        }
142
 
 
143
 
        if (old_deferred)
144
 
                fclose(old_deferred);
145
 
        old_deferred = fopen(fn.buf, "r");
146
 
        if (!old_deferred) {
147
 
                if (errno != ENOENT)
148
 
                        ohshite(_("unable to open triggers deferred file `%.250s'"),
149
 
                                fn.buf);
150
 
                if (!(uf & tduf_writeifenoent)) {
151
 
                        pop_cleanup(ehflag_normaltidy);
152
 
                        return -3;
153
 
                }
154
 
        }
155
 
 
156
 
        if (uf & tduf_write) {
157
 
                constructfn(&newfn, admindir, TRIGGERSDEFERREDFILE ".new");
158
 
                if (trig_new_deferred)
159
 
                        fclose(trig_new_deferred);
160
 
                trig_new_deferred = fopen(newfn.buf, "w");
161
 
                if (!trig_new_deferred)
162
 
                        ohshite(_("unable to open/create new triggers deferred file `%.250s'"),
163
 
                                newfn.buf);
164
 
        }
165
 
 
166
 
        if (!old_deferred)
167
 
                return 1;
168
 
 
169
 
        trigdef_yyrestart(old_deferred);
170
 
        BEGIN(0);
171
 
 
172
 
        return 2;
173
 
}
174
 
 
175
 
void
176
 
trigdef_process_done(void)
177
 
{
178
 
        int r;
179
 
 
180
 
        if (old_deferred) {
181
 
                if (ferror(old_deferred))
182
 
                        ohshite(_("error reading triggers deferred file `%.250s'"),
183
 
                                fn.buf);
184
 
                fclose(old_deferred);
185
 
                old_deferred = NULL;
186
 
        }
187
 
 
188
 
        if (trig_new_deferred) {
189
 
                if (ferror(trig_new_deferred))
190
 
                        ohshite(_("unable to write new triggers deferred "
191
 
                                  "file `%.250s'"), newfn.buf);
192
 
                r = fclose(trig_new_deferred);
193
 
                trig_new_deferred = NULL;
194
 
                if (r)
195
 
                        ohshite(_("unable to close new triggers deferred "
196
 
                                  "file `%.250s'"), newfn.buf);
197
 
 
198
 
                if (rename(newfn.buf, fn.buf))
199
 
                        ohshite(_("unable to install new triggers deferred "
200
 
                                  "file `%.250s'"), fn.buf);
201
 
        }
202
 
 
203
 
        /* Unlock. */
204
 
        pop_cleanup(ehflag_normaltidy);
205
 
}
206