mirror of
https://code.blicky.net/yorhel/ncdu.git
synced 2026-01-13 01:08:41 -09:00
Import/export extended information
And stick to the more portable second resolution timestamps for mtime.
This commit is contained in:
parent
47e969cdf3
commit
40b127591f
4 changed files with 33 additions and 5 deletions
|
|
@ -75,6 +75,9 @@ static void output_int(uint64_t n) {
|
|||
|
||||
|
||||
static void output_info(struct dir *d, const char *name, struct dir_ext *e) {
|
||||
if(!extended_info || !(d->flags & FF_EXT))
|
||||
e = NULL;
|
||||
|
||||
fputs("{\"name\":\"", stream);
|
||||
output_string(name);
|
||||
fputc('"', stream);
|
||||
|
|
@ -96,6 +99,17 @@ static void output_info(struct dir *d, const char *name, struct dir_ext *e) {
|
|||
fputs(",\"ino\":", stream);
|
||||
output_int(d->ino);
|
||||
|
||||
if(e) {
|
||||
fputs(",\"uid\":", stream);
|
||||
output_int(e->uid);
|
||||
fputs(",\"gid\":", stream);
|
||||
output_int(e->gid);
|
||||
fputs(",\"mode\":", stream);
|
||||
output_int(e->mode);
|
||||
fputs(",\"mtime\":", stream);
|
||||
output_int(e->mtime);
|
||||
}
|
||||
|
||||
/* TODO: Including the actual number of links would be nicer. */
|
||||
if(d->flags & FF_HLNKC)
|
||||
fputs(",\"hlnkc\":true", stream);
|
||||
|
|
@ -109,8 +123,6 @@ static void output_info(struct dir *d, const char *name, struct dir_ext *e) {
|
|||
else if(d->flags & FF_OTHFS)
|
||||
fputs(",\"excluded\":\"othfs\"", stream);
|
||||
|
||||
/* TODO: Output extended info if -e is given */
|
||||
|
||||
fputc('}', stream);
|
||||
}
|
||||
|
||||
|
|
@ -136,7 +148,7 @@ static int item(struct dir *item, const char *name, struct dir_ext *ext) {
|
|||
/* File header.
|
||||
* TODO: Add scan options? */
|
||||
if(!stack.top) {
|
||||
fputs("[1,0,{\"progname\":\""PACKAGE"\",\"progver\":\""PACKAGE_VERSION"\",\"timestamp\":", stream);
|
||||
fputs("[1,1,{\"progname\":\""PACKAGE"\",\"progver\":\""PACKAGE_VERSION"\",\"timestamp\":", stream);
|
||||
output_int((uint64_t)time(NULL));
|
||||
fputc('}', stream);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -448,6 +448,22 @@ static int iteminfo() {
|
|||
} else if(strcmp(ctx->val, "ino") == 0) { /* ino */
|
||||
C(rint64(&iv, UINT64_MAX));
|
||||
ctx->buf_dir->ino = iv;
|
||||
} else if(strcmp(ctx->val, "uid") == 0) { /* uid */
|
||||
C(rint64(&iv, INT32_MAX));
|
||||
ctx->buf_dir->flags |= FF_EXT;
|
||||
ctx->buf_ext->uid = iv;
|
||||
} else if(strcmp(ctx->val, "gid") == 0) { /* gid */
|
||||
C(rint64(&iv, INT32_MAX));
|
||||
ctx->buf_dir->flags |= FF_EXT;
|
||||
ctx->buf_ext->gid = iv;
|
||||
} else if(strcmp(ctx->val, "mode") == 0) { /* mode */
|
||||
C(rint64(&iv, UINT16_MAX));
|
||||
ctx->buf_dir->flags |= FF_EXT;
|
||||
ctx->buf_ext->mode = iv;
|
||||
} else if(strcmp(ctx->val, "mtime") == 0) { /* mtime */
|
||||
C(rint64(&iv, UINT64_MAX));
|
||||
ctx->buf_dir->flags |= FF_EXT;
|
||||
ctx->buf_ext->mtime = iv;
|
||||
} else if(strcmp(ctx->val, "hlnkc") == 0) { /* hlnkc */
|
||||
if(*ctx->buf == 't') {
|
||||
C(rlit("true", 4));
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ static void stat_to_dir(struct stat *fs) {
|
|||
}
|
||||
|
||||
buf_ext->mode = fs->st_mode;
|
||||
buf_ext->mtime = fs->st_mtim;
|
||||
buf_ext->mtime = fs->st_mtime;
|
||||
buf_ext->uid = (int)fs->st_uid;
|
||||
buf_ext->gid = (int)fs->st_gid;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ struct dir {
|
|||
* memory region as struct dir, placed after the name field. See util.h for
|
||||
* macros to help manage this. */
|
||||
struct dir_ext {
|
||||
struct timespec mtime;
|
||||
uint64_t mtime;
|
||||
int uid, gid;
|
||||
unsigned short mode;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue