Merge branch 'maint'

Conflicts:
	src/io.c
This commit is contained in:
Lukas Fleischer 2011-09-06 14:56:17 +02:00
commit 78b663d073
13 changed files with 251 additions and 171 deletions

View File

@ -2,7 +2,11 @@ AUTOMAKE_OPTIONS= foreign
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = doc po src
SUBDIRS = po src
if ENABLE_DOCS
SUBDIRS += doc
endif
EXTRA_DIST = \
INSTALL \

8
NEWS
View File

@ -1,3 +1,11 @@
[08 Sep 2011]
Version 2.9.2:
- Bugfixes:
* Handle iCal line folding correctly.
* Introduce a configure option to completely exclude the documentation
subdirectory from the build process ("--disable-docs").
[03 Aug 2011]
Version 2.9.1:
- Bugfixes:

View File

@ -70,23 +70,34 @@ AC_CHECK_HEADERS([math.h], [
#-------------------------------------------------------------------------------
# Check whether to build documentation
#-------------------------------------------------------------------------------
AC_ARG_ENABLE(docs,
AS_HELP_STRING([--disable-docs], [skip documentation]),
[enabledocs=$enableval], [enabledocs=yes])
if test x"$enabledocs" != x"yes"; then
enabledocs=no
AC_MSG_WARN([Skipping documentation!])
fi
AC_MSG_CHECKING([whether to include documentation])
AC_MSG_RESULT($enabledocs)
AM_CONDITIONAL(ENABLE_DOCS, test x"$enabledocs" = x"yes")
AC_ARG_WITH(asciidoc,
AS_HELP_STRING([--with-asciidoc],
[Use asciidoc to regenerate documentation.]),
[use AsciiDoc to regenerate documentation]),
[use_asciidoc=$withval],
[use_asciidoc="auto"])
if test x"$use_asciidoc" = x"auto"; then
AC_PATH_PROG([ASCIIDOC], [asciidoc])
if test -z "$ASCIIDOC"; then
have_asciidoc=no
AC_MSG_WARN([AsciiDoc not found - documentation will be skipped!])
AC_MSG_WARN([AsciiDoc not found - cannot rebuild documentation!])
else
have_asciidoc=yes
fi
AC_PATH_PROG([A2X], [a2x])
if test -z "$A2X"; then
have_a2x=no
AC_MSG_WARN([a2x not found - man pages will be skipped!])
AC_MSG_WARN([a2x not found - cannot rebuild man pages!])
else
have_a2x=yes
fi
@ -101,7 +112,7 @@ elif test x"$use_asciidoc" = x"yes"; then
fi
have_asciidoc=yes
elif test x"$use_asciidoc" = x"no"; then
AC_MSG_WARN(["--without-asciidoc" specified - documentation will be skipped!])
AC_MSG_WARN([Will not rebuild documentation!])
have_asciidoc=no
have_a2x=no
fi

View File

@ -5,19 +5,19 @@ ASCIIDOC_ARGS = \
-n \
-a toc \
-a icons
dist_doc_DATA = \
manual.html
endif
if HAVE_A2X
A2X_ARGS = \
-d manpage \
-f manpage
endif
dist_doc_DATA = \
manual.html
dist_man_MANS = \
calcurse.1
endif
EXTRA_DIST = \
manual.txt \

View File

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: calcurse 2.9.1\n"
"Project-Id-Version: calcurse 2.9.2\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
"POT-Creation-Date: 2011-07-31 02:54+0200\n"
"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
"POT-Creation-Date: 2011-07-31 02:54+0200\n"
"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: 2011-05-11 14:00+0000\n"
"Last-Translator: cryptocrack <transifex@cryptocrack.de>\n"
"Language-Team: German (http://www.transifex.net/projects/p/calcurse/team/"

View File

@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse 1.4\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
"POT-Creation-Date: 2011-07-31 02:54+0200\n"
"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: 2006-07-03 00:05+0100\n"
"Last-Translator: Neil Williams <linux@codehelp.co.uk>\n"
"Language-Team: English/GB <en_GB@li.org>\n"

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
"POT-Creation-Date: 2011-07-31 02:54+0200\n"
"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: 2011-05-11 09:21+0000\n"
"Last-Translator: cryptocrack <transifex@cryptocrack.de>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

172
po/fr.po
View File

@ -2,13 +2,15 @@
# Copyright (C) YEAR Free Software Foundation, Inc.
# This file is distributed under the same license as the PACKAGE package.
#
# esaule <godrik@mandragor.org>, 2011.
# Lukas Fleischer <transifex@cryptocrack.de>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
"POT-Creation-Date: 2011-07-31 02:54+0200\n"
"PO-Revision-Date: 2011-05-17 13:44+0000\n"
"Last-Translator: esaule <godrik@mandragor.org>\n"
"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: 2011-09-04 21:35+0000\n"
"Last-Translator: lkppo <lkppo@free.fr>\n"
"Language-Team: French (http://www.transifex.net/projects/p/calcurse/team/"
"fr/)\n"
"Language: fr\n"
@ -74,6 +76,10 @@ msgid ""
"Copyright (c) 2004-2011 calcurse Development Team.\n"
"This is free software; see the source for copying conditions.\n"
msgstr ""
"\n"
"Copyright (c) 2004-2011 Équipe de développement de calcurse.\n"
"Ceci est un logiciel libre ; consultez le code source pour connaître les "
"conditions légales d'utilisation.\n"
#, c-format
msgid "Calcurse %s - text-based organizer\n"
@ -150,6 +156,81 @@ msgid ""
"For more information, type '?' from within Calcurse, or read the manpage.\n"
"Mail bug reports and suggestions to <misc@calcurse.org>.\n"
msgstr ""
"\n"
"Divers:\n"
" -h, --help\n"
"\taffiche cette aide et quitte.\n"
"\n"
" -v, --version\n"
"\taffiche la version de calcurse et quitte.\n"
"\n"
" --status\n"
"\taffiche l'état des instances de calcurse en cours d'exécution.\n"
"\n"
"Fichiers:\n"
" -c <fichier>, --calendar <fichier>\n"
"\tindique le <fichier> de calendrier à utiliser (incompatible avec '-D').\n"
"\n"
" -D <dir>, --directory <dir>\n"
"\tindique le répertoire de données à utiliser (incompatible avec '-c').\n"
"\tSi non indiqué, le répertoire par défaut est ~/.calcurse\n"
"\n"
"Non-interactif:\n"
" -a, --appointment\n"
" \taffiche les évènements et les rendez-vous du jour et quitte.\n"
"\n"
" -d <date|nb>, --day <date|nb>\n"
"\taffiche les évènements et rendez-vous d'une <date> ou des <nb> prochains "
"jours et\n"
"\tquitte. Pour indiquer un jour de départ et une durée, utilisez les "
"options\n"
"\t'--startday' and '--range'.\n"
"\n"
" -i <fichier>, --import <fichier>\n"
"\timporte les données au format icalendar depuis un <fichier>. \n"
"\n"
" -n, --next\n"
"\taffiche le prochain rendez-vous à venir dans les 24 heures et quitte. "
"Donne aussi\n"
"\tle temps restant avant le rendez-vous suivant.\n"
" -N, --note\n"
"\tutilisée avec l'option '-a' ou '-t', affiche la note associée\n"
"\tà l'élément affiché s'il en a une.\n"
"\n"
" -r[nombre], --range[=nombre]\n"
"\taffiche les évènements et les rendez-vous sur [nombre] de jours\n"
"\tet quitte. Si [nombre] n'est pas précisé, on utilise une durée de 1 jour "
"par défaut.\n"
"\n"
" -s[date], --startday[=date]\n"
"\taffiche les évènements et rendez-vous d'une [date] et quitte.\n"
"\tSi la [date] n'est pas précisée, la date courante est utilisée.\n"
"\n"
" -S<regex>, --search=<regex>\n"
"\tRecherche les évènements, rendez-vous et tâches\n"
"\tdont la description correspond à l'expression régulière [regex].n\n"
" -t[priorite], --todo[=priorite]\n"
"\taffiche la liste des tâches et quitte. Si la valeur facultative [priorite] "
"est précisée,\n"
"\talors ne seront affichées que les tâches de ce niveau priorité.\n"
"\tLe niveau de priorité est compris entre 1 (plus important) et 9 (moins "
"important).\n"
"\tIl est également possible de spécifier '0' pour la priorité,\n"
"\tauquel cas seules les tâches terminées seront affichés.\n"
"\n"
" -x[format], --export[=format]\n"
"\texporte les données utilisateur au format spécifié. Évènements, rendez-"
"vous et \n"
"\ttâches sont convertis et envoyés sur la sortie standard (stdout).\n"
"\tDeux formats au choix : 'ical' et 'pcal'.\n"
"\tSi l'option facultative de format est omise, le format ical\n"
"\test sélectionné par défaut.\n"
"\tnote : pour rediriger la sortie de l'export vers un fichier,\n"
"\tutilisez une commande de la forme : calcurse --export > calcurse.dat\n"
"\n"
"Pour plus d'informations, tapez '?' dans Calcurse, ou lisez le manuel.\n"
"Envoyez par courriel vos rapports de bogue et vos suggestions à "
"<misc@calcurse.org>.\n"
#, c-format
msgid ""
@ -235,7 +316,7 @@ msgid "To do :"
msgstr "Tâche :"
msgid "ERROR setting first day of week"
msgstr ""
msgstr "ERREUR de paramètre sur le premier jour de la semaine"
msgid ""
"The day you entered is not valid (should be between 01/01/1902 and "
@ -278,7 +359,7 @@ msgid "Layout"
msgstr "Ecran"
msgid "Sidebar"
msgstr ""
msgstr "Barre latérale"
msgid "Color"
msgstr "Couleur"
@ -287,10 +368,10 @@ msgid "Notify"
msgstr "Notifier"
msgid "Keys"
msgstr ""
msgstr "Raccourcis"
msgid "Select"
msgstr ""
msgstr "Sélectionner"
msgid "Up"
msgstr "Haut"
@ -479,19 +560,19 @@ msgid "undefined"
msgstr "inconnue"
msgid "Key info"
msgstr ""
msgstr "Informations"
msgid "Add key"
msgstr ""
msgstr "Ajouter"
msgid "Del key"
msgstr ""
msgstr "Supprimer"
msgid "Prev Key"
msgstr ""
msgstr "Précédent"
msgid "Next Key"
msgstr ""
msgstr "Suivant"
#, c-format
msgid "keys configuration"
@ -692,7 +773,7 @@ msgid ""
msgstr ""
msgid "Displacement keys\n"
msgstr ""
msgstr "Touches de déplacement\n"
#, c-format
msgid ""
@ -721,7 +802,7 @@ msgid ""
msgstr ""
msgid "View\n"
msgstr ""
msgstr "Afficher\n"
#, c-format
msgid ""
@ -772,7 +853,7 @@ msgid ""
msgstr ""
msgid "Delete\n"
msgstr ""
msgstr "Supprimer\n"
#, c-format
msgid ""
@ -1016,7 +1097,7 @@ msgid ""
msgstr ""
msgid "Generic keybindings\n"
msgstr ""
msgstr "Raccourcis clavier génériques\n"
#, c-format
msgid ""
@ -1093,6 +1174,8 @@ msgstr "Export..."
msgid "Internal error while displaying progress bar"
msgstr ""
"Une erreur interne s'est produite durant l'affichage de la barre de "
"progression"
msgid "Choose the file used to export calcurse data:"
msgstr "Choisissez le fichier dans lequel exporter les données :"
@ -1147,7 +1230,7 @@ msgid "The data files were successfully saved"
msgstr "Les données ont été correctement enregistrées"
msgid "syntax error in the item date"
msgstr ""
msgstr "Erreur de syntaxe sur la date"
msgid "no event nor appointment found"
msgstr "Aucun évènement ou rendez-vous trouvé"
@ -1159,7 +1242,7 @@ msgid "Failed to open todo file"
msgstr "Problème d'ouverture du fichier des tâches"
msgid "could not find any key file."
msgstr ""
msgstr "Impossible de trouver un fichier de raccourcis."
msgid ""
"\n"
@ -1167,23 +1250,29 @@ msgid ""
"Please backup your keys file, remove it from directory, and launch calcurse "
"again.\n"
msgstr ""
"\n"
"Trop d'erreurs à la lecture du fichier de configuration !\n"
"Veuillez faire une sauvegarde votre fichier de raccourcis, et le supprimer "
"du répertoire, puis relancer calcurse.\n"
msgid "Could not read key label"
msgstr ""
msgstr "Impossible de lire le libellé de la touche"
msgid "Key label not recognized"
msgstr "Touche non reconnue"
#, c-format
msgid "Error reading key: \"%s\""
msgstr ""
msgstr "Erreur de lecture de la touche : \"%s\""
#, c-format
msgid "\"%s\" assigned multiple times!"
msgstr ""
msgstr "\"%s\" est assignée plusieurs fois !"
msgid "There were some errors when loading keys file, see log file ?"
msgstr ""
"Des erreurs se sont produites lors du chargement du fichier de raccourcis. "
"Voulez-vous consulter le journal ?"
msgid "Too many errors while reading keys file, aborting..."
msgstr "Trop d'erreur durant la lecture du fichier de touche, annulation..."
@ -1254,7 +1343,7 @@ msgid "item has a negative duration."
msgstr "L'élément a une durée négative."
msgid "event date is not defined."
msgstr ""
msgstr "La date de l'évènement n'est pas définie."
msgid "item could not be identified."
msgstr "L'élément n'a pu être identifié."
@ -1312,6 +1401,8 @@ msgstr "Certains éléments n'ont pu être importés, voir le fichier de log ?"
msgid "Warning: could not create temporary log file, Aborting..."
msgstr ""
"Attention : création d'un fichier journal temporaire impossible, abandon en "
"cours..."
msgid "Warning: could not open temporary log file, Aborting..."
msgstr "Attention: impossible d'ouvrir le fichier de log, abandon..."
@ -1385,7 +1476,7 @@ msgid "notify-daemon_log = "
msgstr "notify-daemon_log = "
msgid "(Log activity when running in background)"
msgstr ""
msgstr "Enregistrer l'activité lors de l'exécution en arrière-plan"
msgid "Enter the time format (see 'man 3 strftime' for possible formats) "
msgstr ""
@ -1409,13 +1500,15 @@ msgid "unknown character"
msgstr "caractère inconnu"
msgid "date error in event"
msgstr "Date erroné pour le rendez-vous"
msgstr "Date erronée pour l'évènement"
msgid "appointment not found"
msgstr "rendez-vous inconnu"
msgid "Enter the repetition type: (D)aily, (W)eekly, (M)onthly, (Y)early"
msgstr "Entrez le type: (D) journ., (W) hebdo., (M) mensuel, (Y) annuel"
msgstr ""
"Entrez le type de répétition : (D) quotidien, (W) hebdomadaire, (M) mensuel, "
"(Y) annuel"
msgid "Enter the repetition frequence:"
msgstr "Entrez la fréquence de répétition :"
@ -1426,19 +1519,20 @@ msgstr "Entrez la date de fin: [%s] ou '0' pour répéter indéfiniment"
#, c-format
msgid "Possible formats are [%s] or '0' for an endless repetition"
msgstr "Les formats autorisés sont [%s] ou '0' pour une répétition sans fin"
msgstr ""
"Les formats autorisés sont [%s] ou '0' pour une répétition indéfiniment"
msgid "This item is already a repeated one."
msgstr "Cet élément est déjà recurrent."
msgstr "Cet élément est déjà récurrent."
msgid "Sorry, the date you entered is older than the item start time."
msgstr "La date que vous avez entrée est antérieure à la date de l'élément!"
msgstr "La date que vous avez entrée est antérieure à la date de l'élément !"
msgid "wrong item type"
msgstr "type d'élément incorrect"
msgid "syntax error in item date"
msgstr "erreur de syntaxe dans la data de l'élément"
msgstr "erreur de syntaxe dans la date de l'élément"
#, c-format
msgid "Could not remove calcurse lock file: %s\n"
@ -1465,7 +1559,7 @@ msgstr "Voulez-vous vraiment effacer cette tâche ?"
msgid "This item has a note attached to it. Delete (t)odo or just its (n)ote ?"
msgstr ""
"Une note est attachée à cette tâche. Effacer (t) la tâche ou (n) la note "
"Une note est attachée à cette tâche. Effacer la (t)âche ou la (n)ote "
"seulement ?"
msgid "[t/n] "
@ -1493,10 +1587,10 @@ msgid "Internal error: line too long"
msgstr "Erreur interne : ligne trop longue"
msgid "out of memory"
msgstr "plus de memoire"
msgstr "dépassement de mémoire"
msgid "failure in mktime"
msgstr "faute dans mktime"
msgstr "erreur fatale dans mktime"
msgid "error in mktime"
msgstr "erreur dans mktime"
@ -1508,7 +1602,7 @@ msgid "could not convert string"
msgstr "impossible de convertir la chaîne de caractères"
msgid "out of range"
msgstr "en dehors de l'interval"
msgstr "en dehors de l'intervalle"
msgid "yes"
msgstr "oui"
@ -1517,14 +1611,14 @@ msgid "no"
msgstr "non"
msgid "option not defined"
msgstr "option non definie"
msgstr "option non définie"
#, c-format
msgid "temporary file \"%s\" could not be created"
msgstr "le fichier temporaire \"%s\" n'a pas pu être crée"
msgid "could not remove note"
msgstr "impossible de retirer la note"
msgstr "impossible de supprimer la note"
#, c-format
msgid "Error when closing file at %s"
@ -1633,13 +1727,13 @@ msgid "Config"
msgstr "Config"
msgid "Redraw"
msgstr "Retracer"
msgstr "Rafraîchir"
msgid "Add Appt"
msgstr "Ajt rdv"
msgid "Add Todo"
msgstr "Ajt todo"
msgstr "Ajt tâche"
msgid "+1 Day"
msgstr "+1 Jour"
@ -1657,10 +1751,10 @@ msgid "Today"
msgstr "Aujourd."
msgid "Nxt View"
msgstr "Proch.Vue"
msgstr "Voir Suiv."
msgid "Prv View"
msgstr "VuePrec."
msgstr "Voir Prec."
msgid "beg Week"
msgstr "deb Sem."

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
"POT-Creation-Date: 2011-07-31 02:54+0200\n"
"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: 2011-05-11 09:21+0000\n"
"Last-Translator: cryptocrack <transifex@cryptocrack.de>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"

View File

@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calcurse\n"
"Report-Msgid-Bugs-To: bugs@calcurse.org\n"
"POT-Creation-Date: 2011-07-31 02:54+0200\n"
"POT-Creation-Date: 2011-09-06 14:34+0200\n"
"PO-Revision-Date: 2011-05-23 18:06+0000\n"
"Last-Translator: Rusdec <linux.kernel.it@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.net/projects/p/calcurse/team/"

View File

@ -193,13 +193,19 @@ print_notefile (FILE *out, char *filename, int nbtab)
{
char path_to_notefile[BUFSIZ];
FILE *notefile;
char linestarter[BUFSIZ] = "";
char linestarter[BUFSIZ];
char buffer[BUFSIZ];
int i;
int printlinestarter = 1;
for (i = 0; i < nbtab; i++)
(void)snprintf(linestarter, BUFSIZ, "%s\t", linestarter);
if (nbtab < BUFSIZ)
{
for (i = 0; i < nbtab; i++)
linestarter[i] = '\t';
linestarter[nbtab] = '\0';
}
else
linestarter[0] = '\0';
(void)snprintf (path_to_notefile, BUFSIZ, "%s/%s", path_notes, filename);
notefile = fopen (path_to_notefile, "r");

183
src/io.c
View File

@ -1813,7 +1813,7 @@ ical_store_apoint (char *mesg, char *note, long start, long dur,
/*
* Returns an allocated string representing the string given in argument once
* unformatted. See ical_unfold_content () below.
* unformatted.
*
* Note:
* Even if the RFC2445 recommends not to have more than 75 octets on one line of
@ -1827,8 +1827,6 @@ ical_store_apoint (char *mesg, char *note, long start, long dur,
static char *
ical_unformat_line (char *line)
{
#define LINE_FEED 0x0a
#define CARRIAGE_RETURN 0x0d
char *p, uline[BUFSIZ];
int len;
@ -1840,10 +1838,6 @@ ical_unformat_line (char *line)
{
switch (*p)
{
case LINE_FEED:
return mem_strdup (uline);
case CARRIAGE_RETURN:
break;
case '\\':
switch (*(p + 1))
{
@ -1871,106 +1865,69 @@ ical_unformat_line (char *line)
break;
}
}
#undef LINE_FEED
#undef CARRIAGE_RETURN
return NULL;
return mem_strdup (uline);
}
/*
* Extract from RFC2445:
*
* When parsing a content line, folded lines MUST first be
* unfolded [..] The content information associated with an iCalendar
* object is formatted using a syntax similar to that defined by [RFC 2425].
*/
static char *
ical_unfold_content (FILE *fd, char *line, unsigned *lineno)
static void
ical_readline_init (FILE *fdi, char *buf, char *lstore, unsigned *ln)
{
char *content;
int c;
char *eol;
content = ical_unformat_line (line);
if (!content)
return NULL;
*buf = *lstore = '\0';
fgets (lstore, BUFSIZ, fdi);
if ((eol = strchr(lstore, '\n')) != NULL)
*eol = '\0';
(*ln)++;
}
for (;;)
static int
ical_readline (FILE *fdi, char *buf, char *lstore, unsigned *ln)
{
char *eol;
strncpy (buf, lstore, BUFSIZ);
(*ln)++;
while (fgets (lstore, BUFSIZ, fdi) != NULL)
{
c = getc (fd);
if (c == SPACE || c == TAB)
{
char buf[BUFSIZ];
if (fgets (buf, BUFSIZ, fd) != NULL)
{
char *tmpline, *rline;
int newsize;
(*lineno)++;
tmpline = ical_unformat_line (buf);
if (!tmpline)
{
mem_free (content);
return NULL;
}
newsize = strlen (content) + strlen (tmpline) + 1;
if ((rline = mem_realloc (content, newsize, 1)) == NULL)
{
mem_free (content);
mem_free (tmpline);
return NULL;
}
content = rline;
(void)strncat (content, tmpline, BUFSIZ);
mem_free (tmpline);
}
else
{
mem_free (content);
return NULL;
/* Could not get entire item description. */
}
}
else
{
(void)ungetc (c, fd);
return content;
}
if ((eol = strchr(lstore, '\n')) != NULL)
*eol = '\0';
if (*lstore != SPACE && *lstore != TAB)
break;
strncat (buf, lstore + 1, BUFSIZ);
(*ln)++;
}
if (feof (fdi))
{
*lstore = '\0';
if (*buf == '\0')
return 0;
}
return 1;
}
static float
ical_chk_header (FILE *fd, unsigned *lineno)
ical_chk_header (FILE *fd, char *buf, char *lstore, unsigned *lineno)
{
const int HEADER_MALFORMED = -1;
const struct string icalheader = STRING_BUILD ("BEGIN:VCALENDAR");
char buf[BUFSIZ];
float version;
(void)fgets (buf, BUFSIZ, fd);
(*lineno)++;
if (buf == NULL) return HEADER_MALFORMED;
if (!ical_readline (fd, buf, lstore, lineno))
return HEADER_MALFORMED;
str_toupper (buf);
if (strncmp (buf, icalheader.str, icalheader.len) != 0)
return HEADER_MALFORMED;
const int AWAITED = 1;
float version = HEADER_MALFORMED;
int read;
do
while (!sscanf (buf, "VERSION:%f", &version))
{
if (fgets (buf, BUFSIZ, fd) == NULL)
{
return HEADER_MALFORMED;
}
else
{
(*lineno)++;
read = sscanf (buf, "VERSION:%f", &version);
}
if (!ical_readline (fd, buf, lstore, lineno))
return HEADER_MALFORMED;
}
while (read != AWAITED);
return version;
}
@ -2354,14 +2311,13 @@ ical_read_exdate (llist_t *exc, FILE *log, char *exstr, unsigned *noskipped,
/* Return an allocated string containing the name of the newly created note. */
static char *
ical_read_note (char *first_line, FILE *fdi, unsigned *noskipped,
unsigned *lineno, ical_vevent_e item_type, const int itemline,
FILE *log)
ical_read_note (char *line, unsigned *noskipped, ical_vevent_e item_type,
const int itemline, FILE *log)
{
char *p, *notestr, *notename, fullnotename[BUFSIZ];
FILE *fdo;
if ((p = strchr (first_line, ':')) != NULL)
if ((p = strchr (line, ':')) != NULL)
{
notename = new_tempfile (path_notes, NOTESIZ);
EXIT_IF (notename == NULL,
@ -2372,7 +2328,7 @@ ical_read_note (char *first_line, FILE *fdi, unsigned *noskipped,
EXIT_IF (fdo == NULL, _("Warning: could not open %s, Aborting..."),
fullnotename);
p++;
notestr = ical_unfold_content (fdi, p, lineno);
notestr = ical_unformat_line (p);
if (notestr == NULL)
{
ical_log (log, item_type, itemline,
@ -2407,14 +2363,14 @@ ical_read_note (char *first_line, FILE *fdi, unsigned *noskipped,
/* Returns an allocated string containing the ical item summary. */
static char *
ical_read_summary (char *first_line, FILE *fdi, unsigned *lineno)
ical_read_summary (char *line)
{
char *p, *summary;
if ((p = strchr (first_line, ':')) != NULL)
if ((p = strchr (line, ':')) != NULL)
{
p++;
summary = ical_unfold_content (fdi, p, lineno);
summary = ical_unformat_line (p);
return summary;
}
else
@ -2423,7 +2379,8 @@ ical_read_summary (char *first_line, FILE *fdi, unsigned *lineno)
static void
ical_read_event (FILE *fdi, FILE *log, unsigned *noevents, unsigned *noapoints,
unsigned *noskipped, unsigned *lineno)
unsigned *noskipped, char *buf, char *lstore,
unsigned *lineno)
{
const int ITEMLINE = *lineno;
const struct string endevent = STRING_BUILD ("END:VEVENT");
@ -2437,7 +2394,7 @@ ical_read_event (FILE *fdi, FILE *log, unsigned *noevents, unsigned *noapoints,
const struct string endalarm = STRING_BUILD ("END:VALARM");
const struct string desc = STRING_BUILD ("DESCRIPTION");
ical_vevent_e vevent_type;
char *p, buf[BUFSIZ], buf_upper[BUFSIZ];
char *p, buf_upper[BUFSIZ];
struct {
llist_t exc;
ical_rpt_t *rpt;
@ -2450,11 +2407,11 @@ ical_read_event (FILE *fdi, FILE *log, unsigned *noevents, unsigned *noapoints,
vevent_type = UNDEFINED;
bzero (&vevent, sizeof vevent);
skip_alarm = 0;
while (fgets (buf, BUFSIZ, fdi) != NULL)
while (ical_readline (fdi, buf, lstore, lineno))
{
(*lineno)++;
memcpy (buf_upper, buf, strlen (buf));
str_toupper (buf_upper);
if (skip_alarm)
{
/* Need to skip VALARM properties because some keywords could
@ -2584,7 +2541,7 @@ ical_read_event (FILE *fdi, FILE *log, unsigned *noevents, unsigned *noapoints,
}
else if (strncmp (buf_upper, summary.str, summary.len) == 0)
{
vevent.mesg = ical_read_summary (buf, fdi, lineno);
vevent.mesg = ical_read_summary (buf);
}
else if (strncmp (buf_upper, alarm.str, alarm.len) == 0)
{
@ -2593,8 +2550,8 @@ ical_read_event (FILE *fdi, FILE *log, unsigned *noevents, unsigned *noapoints,
}
else if (strncmp (buf_upper, desc.str, desc.len) == 0)
{
vevent.note = ical_read_note (buf, fdi, noskipped, lineno,
ICAL_VEVENT, ITEMLINE, log);
vevent.note = ical_read_note (buf, noskipped, ICAL_VEVENT,
ITEMLINE, log);
}
}
}
@ -2616,7 +2573,7 @@ cleanup:
static void
ical_read_todo (FILE *fdi, FILE *log, unsigned *notodos, unsigned *noskipped,
unsigned *lineno)
char *buf, char *lstore, unsigned *lineno)
{
const struct string endtodo = STRING_BUILD ("END:VTODO");
const struct string summary = STRING_BUILD ("SUMMARY");
@ -2625,7 +2582,7 @@ ical_read_todo (FILE *fdi, FILE *log, unsigned *notodos, unsigned *noskipped,
const struct string desc = STRING_BUILD ("DESCRIPTION");
const int LOWEST = 9;
const int ITEMLINE = *lineno;
char buf[BUFSIZ], buf_upper[BUFSIZ];
char buf_upper[BUFSIZ];
struct {
char *mesg, *note;
int has_priority, priority;
@ -2634,9 +2591,8 @@ ical_read_todo (FILE *fdi, FILE *log, unsigned *notodos, unsigned *noskipped,
bzero (&vtodo, sizeof vtodo);
skip_alarm = 0;
while (fgets (buf, BUFSIZ, fdi) != NULL)
while (ical_readline (fdi, buf, lstore, lineno))
{
(*lineno)++;
memcpy (buf_upper, buf, strlen (buf));
str_toupper (buf_upper);
if (skip_alarm)
@ -2685,7 +2641,7 @@ ical_read_todo (FILE *fdi, FILE *log, unsigned *notodos, unsigned *noskipped,
}
else if (strncmp (buf_upper, summary.str, summary.len) == 0)
{
vtodo.mesg = ical_read_summary (buf, fdi, lineno);
vtodo.mesg = ical_read_summary (buf);
}
else if (strncmp (buf_upper, alarm.str, alarm.len) == 0)
{
@ -2693,8 +2649,8 @@ ical_read_todo (FILE *fdi, FILE *log, unsigned *notodos, unsigned *noskipped,
}
else if (strncmp (buf_upper, desc.str, desc.len) == 0)
{
vtodo.note = ical_read_note (buf, fdi, noskipped, lineno,
ICAL_VTODO, ITEMLINE, log);
vtodo.note = ical_read_note (buf, noskipped, ICAL_VTODO,
ITEMLINE, log);
}
}
}
@ -2759,7 +2715,7 @@ io_import_data (enum import_type type, struct conf *conf, char *stream_name)
const struct string vtodo = STRING_BUILD ("BEGIN:VTODO");
char *proc_report = _("Import process report: %04d lines read ");
char stats_str[4][BUFSIZ];
char buf[BUFSIZ];
char buf[BUFSIZ], lstore[BUFSIZ];
FILE *stream = NULL;
struct io_file *log;
float ical_version;
@ -2788,7 +2744,8 @@ io_import_data (enum import_type type, struct conf *conf, char *stream_name)
return;
bzero (&stats, sizeof stats);
ical_version = ical_chk_header (stream, &stats.lines);
ical_readline_init (stream, buf, lstore, &stats.lines);
ical_version = ical_chk_header (stream, buf, lstore, &stats.lines);
RETURN_IF (ical_version < 0,
_("Warning: ical header malformed or wrong version number. "
"Aborting..."));
@ -2802,19 +2759,19 @@ io_import_data (enum import_type type, struct conf *conf, char *stream_name)
}
ical_log_init (log->fd, ical_version);
while (fgets (buf, BUFSIZ, stream) != NULL)
while (ical_readline (stream, buf, lstore, &stats.lines))
{
stats.lines++;
str_toupper (buf);
if (strncmp (buf, vevent.str, vevent.len) == 0)
{
ical_read_event (stream, log->fd, &stats.events, &stats.apoints,
&stats.skipped, &stats.lines);
&stats.skipped, buf, lstore, &stats.lines);
}
else if (strncmp (buf, vtodo.str, vtodo.len) == 0)
{
ical_read_todo (stream, log->fd, &stats.todos, &stats.skipped,
&stats.lines);
buf, lstore, &stats.lines);
}
}
if (stream != stdin)