match_fstype.c 805 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /* vi: set sw=4 ts=4: */
  2. /*
  3. * Match fstypes for use in mount unmount
  4. * We accept notmpfs,nfs but not notmpfs,nonfs
  5. * This allows us to match fstypes that start with no like so
  6. * mount -at ,noddy
  7. *
  8. * Returns 0 for a match, otherwise -1
  9. *
  10. * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  11. */
  12. #include "libbb.h"
  13. int match_fstype(const struct mntent *mt, const char *fstype)
  14. {
  15. int no = 0;
  16. int len;
  17. if (!mt)
  18. return -1;
  19. if (!fstype)
  20. return 0;
  21. if (fstype[0] == 'n' && fstype[1] == 'o') {
  22. no = -1;
  23. fstype += 2;
  24. }
  25. len = strlen(mt->mnt_type);
  26. while (fstype) {
  27. if (!strncmp(mt->mnt_type, fstype, len)
  28. && (!fstype[len] || fstype[len] == ',')
  29. ) {
  30. return no;
  31. }
  32. fstype = strchr(fstype, ',');
  33. if (fstype)
  34. fstype++;
  35. }
  36. return -(no + 1);
  37. }