+DEFUN ("file-system-info", Ffile_system_info, Sfile_system_info, 1, 1, 0,
+ doc: /* Return storage information about the file system FILENAME is on.
+Value is a list of floats (TOTAL FREE AVAIL), where TOTAL is the total
+storage of the file system, FREE is the free storage, and AVAIL is the
+storage available to a non-superuser. All 3 numbers are in bytes.
+If the underlying system call fails, value is nil. */)
+ (filename)
+ Lisp_Object filename;
+{
+ struct statfs stfs;
+ Lisp_Object encoded, value;
+
+ CHECK_STRING (filename);
+ filename = Fexpand_file_name (filename, Qnil);
+ encoded = ENCODE_FILE (filename);
+
+ if (statfs (XSTRING (encoded)->data, &stfs))
+ value = Qnil;
+ else
+ value = list3 (make_float ((double) stfs.f_bsize * stfs.f_blocks),
+ make_float ((double) stfs.f_bsize * stfs.f_bfree),
+ make_float ((double) stfs.f_bsize * stfs.f_bavail));
+
+ return value;
+}
+\f