fgetversion.c revision 66d8c3f33f976e83ea0efd361bb5ac182315a421
13839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 23839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * fgetversion.c - Get a file version on an ext2 file system 33839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * 43839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Copyright (C) 1993, 1994 Remy Card <card@masi.ibp.fr> 53839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Laboratoire MASI, Institut Blaise Pascal 63839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Universite Pierre et Marie Curie (Paris VI) 73839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * 83839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * This file can be redistributed under the terms of the GNU Library General 93839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Public License 103839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 123839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/* 133839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * History: 143839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * 93/10/30 - Creation 153839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */ 163839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 1766d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#define _LARGEFILE_SOURCE 1866d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#define _LARGEFILE64_SOURCE 1966d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o 2050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#if HAVE_ERRNO_H 213839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <errno.h> 2250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif 2350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#if HAVE_UNISTD_H 243839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <unistd.h> 2550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif 2650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#include <fcntl.h> 273839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <sys/ioctl.h> 283839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 293839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include "e2p.h" 303839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 3166d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#ifdef O_LARGEFILE 3266d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE) 3366d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#else 3466d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK) 3566d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#endif 3666d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o 373839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oint fgetversion (const char * name, unsigned long * version) 383839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{ 3950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#if HAVE_EXT2_IOCTLS 40cce382b12c2e0764b91d143ec6f9549c735f8f9eTheodore Ts'o int fd, r, ver; 413839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o 4266d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o fd = open (name, OPEN_FLAGS); 433839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o if (fd == -1) 443839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o return - 1; 4517dba281a042d3f8122ef7ce6933035a8eae074aTheodore Ts'o r = ioctl (fd, EXT2_IOC_GETVERSION, &ver); 46cce382b12c2e0764b91d143ec6f9549c735f8f9eTheodore Ts'o *version = ver; 473839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o close (fd); 483839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o return r; 4950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#else /* ! HAVE_EXT2_IOCTLS */ 5050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o extern int errno; 5150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o errno = EOPNOTSUPP; 5250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o return -1; 5350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif /* ! HAVE_EXT2_IOCTLS */ 543839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o} 55