dfs_seq_file.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. */
  9. #ifndef __DFS_SEQ_FILE_H__
  10. #define __DFS_SEQ_FILE_H__
  11. #include <dfs.h>
  12. #include <dfs_fs.h>
  13. struct dfs_seq_ops;
  14. struct dfs_seq_file
  15. {
  16. char *buf;
  17. size_t size;
  18. size_t from;
  19. size_t count;
  20. size_t pad_until;
  21. off_t index;
  22. off_t read_pos;
  23. struct rt_mutex lock;
  24. const struct dfs_seq_ops *ops;
  25. const struct dfs_file *file;
  26. void *data;
  27. };
  28. struct dfs_seq_ops
  29. {
  30. void *(*start)(struct dfs_seq_file *seq, off_t *index);
  31. void (*stop)(struct dfs_seq_file *seq, void *data);
  32. void *(*next)(struct dfs_seq_file *seq, void *data, off_t *index);
  33. int (*show)(struct dfs_seq_file *seq, void *data);
  34. };
  35. /**
  36. * check if the buffer is full
  37. */
  38. static inline rt_bool_t dfs_seq_is_full(struct dfs_seq_file *seq)
  39. {
  40. return seq->count == seq->size;
  41. }
  42. /**
  43. * set padding width size
  44. */
  45. static inline void dfs_seq_setwidth(struct dfs_seq_file *seq, size_t size)
  46. {
  47. seq->pad_until = seq->count + size;
  48. }
  49. int dfs_seq_open(struct dfs_file *file, const struct dfs_seq_ops *ops);
  50. ssize_t dfs_seq_read(struct dfs_file *file, void *buf, size_t size, off_t *pos);
  51. off_t dfs_seq_lseek(struct dfs_file *file, off_t offset, int whence);
  52. int dfs_seq_release(struct dfs_file *file);
  53. int dfs_seq_write(struct dfs_seq_file *seq, const void *data, size_t len);
  54. void dfs_seq_vprintf(struct dfs_seq_file *seq, const char *fmt, va_list args);
  55. void dfs_seq_printf(struct dfs_seq_file *seq, const char *fmt, ...);
  56. void dfs_seq_putc(struct dfs_seq_file *seq, char c);
  57. void dfs_seq_puts(struct dfs_seq_file *seq, const char *s);
  58. void dfs_seq_pad(struct dfs_seq_file *seq, char c);
  59. #endif