[pacman-dev] [PATCH] Updates to _alpm_copyfile()
Dan McGee
dan at archlinux.org
Mon Apr 28 23:34:11 EDT 2008
Rework to use a single #define for the buffsize, and in the process clean up
some other code and double the default buffer size.
Signed-off-by: Dan McGee <dan at archlinux.org>
---
lib/libalpm/util.c | 22 ++++++++++++++--------
1 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index a7a6573..92e9991 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -215,27 +215,31 @@ int _alpm_makepath_mode(const char *path, mode_t mode)
return(0);
}
+#define CPBUFSIZE 8 * 1024
+
int _alpm_copyfile(const char *src, const char *dest)
{
FILE *in, *out;
size_t len;
- char buf[4097];
+ char *buf;
+ int ret = 0;
- in = fopen(src, "r");
+ in = fopen(src, "rb");
if(in == NULL) {
return(1);
}
- out = fopen(dest, "w");
+ out = fopen(dest, "wb");
if(out == NULL) {
fclose(in);
return(1);
}
+ CALLOC(buf, 1, CPBUFSIZE, ret = 1; goto cleanup;);
+
/* do the actual file copy */
- while((len = fread(buf, 1, 4096, in))) {
+ while((len = fread(buf, 1, CPBUFSIZE, in))) {
fwrite(buf, 1, len, out);
}
- fclose(in);
/* chmod dest to permissions of src, as long as it is not a symlink */
struct stat statbuf;
@@ -245,12 +249,14 @@ int _alpm_copyfile(const char *src, const char *dest)
}
} else {
/* stat was unsuccessful */
- fclose(out);
- return(1);
+ ret = 1;
}
+cleanup:
+ fclose(in);
fclose(out);
- return(0);
+ FREE(buf);
+ return(ret);
}
/* Trim whitespace and newlines from a string
--
1.5.5.1
More information about the pacman-dev
mailing list