[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [tyndur-devel] [PATCH] Neue POSIX-Funktionen
Am 29.01.2011 10:20, schrieb Arne Hasselbring:
> + truncate und ftruncate hinzugefügt
>
> Signed-off-by: Arne Hasselbring <arne.hasselbring@xxxxxxxxxxxxxx>
>
[...]
> diff --git a/src/modules/lib/posix/trunc.c b/src/modules/lib/posix/trunc.c
> new file mode 100644
> index 0000000..df5e882
> --- /dev/null
> +++ b/src/modules/lib/posix/trunc.c
>
[...]
> + if (diff < 0) {
> + char *data = malloc(cur_len);
> + fseek(handle, 0, SEEK_SET);
> + fread(data, cur_len, 1, handle);
> + char *buffer = malloc(length);
> + memcpy(buffer, data, length);
> + free(data);
> + fclose(handle);
> + handle = fopen(path, "w");
> + fwrite(buffer, length, 1, handle);
> + free(buffer);
> + fclose(handle);
> + return 0;
>
Hm, auf die Art und Weise dauert das aber ziemlich lange... Also
meiner Meinung nach sollte man da warten, bis LIOv2 in master ist
und dann die anscheinend existierende Funktion lio_trunc benutzen
(sofern sie das macht, was sie vorgibt zu tun).
> + } else if (diff > 0) {
> + fseek(handle, 0, SEEK_END);
> + int i;
> + for (i = 0; i < diff; i++) {
> + fprintf(handle, "%c", 0);
>
fprintf ist hier wohl eher ein Overkill, fputc reicht doch, wobei
es wohl noch besser wäre, wenn man ganze Speicherblöcke mit Nullen
auf einmal schreibt.
> + }
> + fclose(handle);
> + return 0;
> + } else {
> + errno = EAGAIN;
> + return -1;
>
Wieso ist es ein Fehler, wenn die Dateigröße auf die aktuelle Größe
gesetzt werden soll (diff == 0)?
> + }
> +}
Wie bereits gesagt, ich würde da eigentlich eher auf LIOv2 warten
(oder diese Funktion auf LIOv1-Ebene implementieren), denn wenn
man von einer Datei nur das letzte Byte abschneiden will, wird
hier die gesamte Datei neu geschrieben und das finde ich persönlich
nicht so optimal.