}
char* pakfire_file_dump(struct pakfire_file* file, int flags) {
- char* buffer = NULL;
- int r;
-
+ char buffer[LINE_MAX] = "";
char mode[12];
char time[32];
-
- // Initialize the buffer
- r = asprintf(&buffer, "%s", "");
- if (r < 0)
- goto ERROR;
+ int r;
// Format mode
if (flags & PAKFIRE_FILE_DUMP_MODE) {
r = pakfire_file_strmode(file, mode);
if (r)
- goto ERROR;
+ return NULL;
- r = asprintf(&buffer, "%s %s", buffer, mode);
+ r = pakfire_string_appendf(buffer, " %s", mode);
if (r < 0)
- goto ERROR;
+ return NULL;
}
// Format ownership
const char* uname = pakfire_file_get_uname(file);
const char* gname = pakfire_file_get_gname(file);
- r = asprintf(&buffer, "%s %s/%s", buffer, uname, gname);
+ r = pakfire_string_appendf(buffer, " %s/%s", uname, gname);
if (r < 0)
- goto ERROR;
+ return NULL;
}
// Format size
if (flags & PAKFIRE_FILE_DUMP_SIZE) {
const size_t size = pakfire_file_get_size(file);
- r = asprintf(&buffer, "%s %8zu", buffer, size);
+ r = pakfire_string_appendf(buffer, " %8zu", size);
if (r < 0)
- goto ERROR;
+ return NULL;
}
// Format time
r = pakfire_strftime(time, "%Y-%m-%d %H:%M", ctime);
if (r)
- goto ERROR;
+ return NULL;
- r = asprintf(&buffer, "%s %s", buffer, time);
+ r = pakfire_string_appendf(buffer, " %s", time);
if (r < 0)
- goto ERROR;
+ return NULL;
}
// Format path
- r = asprintf(&buffer, "%s %s", buffer, pakfire_file_get_path(file));
+ r = pakfire_string_appendf(buffer, " %s", pakfire_file_get_path(file));
if (r < 0)
- goto ERROR;
+ return NULL;
// Append symlink target
if (flags & PAKFIRE_FILE_DUMP_LINK_TARGETS) {
switch (pakfire_file_get_type(file)) {
case S_IFLNK:
- r = asprintf(&buffer, "%s -> %s", buffer, pakfire_file_get_symlink(file));
+ r = pakfire_string_appendf(buffer, " -> %s", pakfire_file_get_symlink(file));
if (r < 0)
return NULL;
}
}
- return buffer;
-
-ERROR:
- if (buffer)
- free(buffer);
-
- return NULL;
+ return strdup(buffer);
}
int pakfire_file_cmp(struct pakfire_file* file1, struct pakfire_file* file2) {