コード例 #1
0
ファイル: onefs_streams.c プロジェクト: sprymak/samba
static int stat_stream(struct connection_struct *conn, const char *base,
		       const char *stream, SMB_STRUCT_STAT *sbuf, int flags)
{
	SMB_STRUCT_STAT base_sbuf;
	int base_fd = -1, dir_fd, ret, saved_errno;

	dir_fd = get_stream_dir_fd(conn, base, &base_fd);
	if (dir_fd < 0) {
		return -1;
	}

	/* Stat the stream. */
	ret = onefs_sys_fstat_at(dir_fd, stream, sbuf, flags);
	if (ret != -1) {
		DEBUG(10, ("stat of stream '%s' failed: %s\n", stream,
			   strerror(errno)));
	} else {
		/* Now stat the base file and merge the results. */
		ret = onefs_sys_fstat(base_fd, &base_sbuf);
		if (ret != -1) {
			merge_stat(sbuf, &base_sbuf);
		}
	}

	saved_errno = errno;
	close(dir_fd);
	close(base_fd);
	errno = saved_errno;
	return ret;
}
コード例 #2
0
ファイル: toppost.c プロジェクト: phoenixgao/fdubbs
int main(int argc, char **argv)
{
    chdir(BBSHOME);

    hash_t stat;
    hash_create(&stat, 0, top_hash);
    load_stat(&stat, DAY);

    FILE *fp = fopen(BBSHOME"/.BOARDS", "r");
    if (fp) {
        struct boardheader board;
        while (fread(&board, sizeof(board), 1, fp) == 1) {
            if (board.filename[0] != '\0')
                process(&stat, &board);
        }
        fclose(fp);
    } else {
        return EXIT_FAILURE;
    }

    top_t **tops = sort_stat(&stat);
    if (tops) {
        print_stat(&stat, tops, DAY);
        save_stat(&stat, tops, DAY);
    }

    time_t now = time(NULL);
    struct tm *t = localtime(&now);
    if (t->tm_hour == 3 && t->tm_min < 10) {
        merge_stat(&stat, WEEK);
        merge_stat(&stat, MONTH);
        merge_stat(&stat, YEAR);
        if (t->tm_wday == 0)
            remove_stat(WEEK);
        if (t->tm_mday == 1)
            remove_stat(MONTH);
        if (t->tm_yday == 0)
            remove_stat(YEAR);
    }
    return EXIT_SUCCESS;
}
コード例 #3
0
ファイル: onefs_streams.c プロジェクト: sprymak/samba
int onefs_fstat(vfs_handle_struct *handle, struct files_struct *fsp,
		SMB_STRUCT_STAT *sbuf)
{
	SMB_STRUCT_STAT base_sbuf;
	int ret;

	/* Stat the stream, by calling next_fstat on the stream's fd. */
	ret = onefs_sys_fstat(fsp->fh->fd, sbuf);
	if (ret == -1) {
		return ret;
	}

	/* Stat the base file and merge the results. */
	if (fsp != NULL && fsp->base_fsp != NULL) {
		ret = onefs_sys_fstat(fsp->base_fsp->fh->fd, &base_sbuf);
		if (ret != -1) {
			merge_stat(sbuf, &base_sbuf);
		}
	}

	onefs_adjust_stat_time(handle->conn, fsp->fsp_name->base_name, sbuf);
	return ret;
}