[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.