Home | History | Annotate | Download | only in misc
      1 /*
      2  * mklost+found.c	- Creates a directory lost+found on a mounted second
      3  *			  extended file system
      4  *
      5  * Copyright (C) 1992, 1993  Remy Card <card (at) masi.ibp.fr>
      6  *
      7  * This file can be redistributed under the terms of the GNU General
      8  * Public License
      9  */
     10 
     11 /*
     12  * History:
     13  * 93/04/22	- Creation
     14  */
     15 
     16 #include "config.h"
     17 #include <errno.h>
     18 #include <fcntl.h>
     19 #include <stdio.h>
     20 #include <string.h>
     21 #include <unistd.h>
     22 #include <stdlib.h>
     23 #include <sys/param.h>
     24 #include <sys/stat.h>
     25 
     26 #include "ext2fs/ext2_fs.h"
     27 #include "../version.h"
     28 #include "support/nls-enable.h"
     29 
     30 #define LPF "lost+found"
     31 
     32 int main (int argc, char ** argv)
     33 {
     34 	char name [EXT2_NAME_LEN];
     35 	char path [sizeof (LPF) + 1 + 256];
     36 	struct stat st;
     37 	int i, j;
     38 	int d;
     39 
     40 #ifdef ENABLE_NLS
     41 	setlocale(LC_MESSAGES, "");
     42 	setlocale(LC_CTYPE, "");
     43 	bindtextdomain(NLS_CAT_NAME, LOCALEDIR);
     44 	textdomain(NLS_CAT_NAME);
     45 #endif
     46 	fprintf (stderr, "mklost+found %s (%s)\n", E2FSPROGS_VERSION,
     47 		 E2FSPROGS_DATE);
     48 	if (argc != 1) {
     49 		(void)argv; /* avoid unused argument warning */
     50 		fprintf (stderr, "%s", _("Usage: mklost+found\n"));
     51 		exit(1);
     52 	}
     53 	if (mkdir (LPF, 0700) == -1) {
     54 		perror ("mkdir");
     55 		exit(1);
     56 	}
     57 
     58 	i = 0;
     59 	memset (name, 'x', 246);
     60 	do {
     61 		sprintf (name + 246, "%08d", i);
     62 		strcpy (path, LPF);
     63 		strcat (path, "/");
     64 		strcat (path, name);
     65 		if ((d = creat (path, 0644)) == -1) {
     66 			perror ("creat");
     67 			exit (1);
     68 		}
     69 		i++;
     70 		close (d);
     71 		if (stat (LPF, &st) == -1) {
     72 			perror ("stat");
     73 			exit (1);
     74 		}
     75 	} while (st.st_size <= (EXT2_NDIR_BLOCKS - 1) * st.st_blksize);
     76 	for (j = 0; j < i; j++) {
     77 		sprintf (name + 246, "%08d", j);
     78 		strcpy (path, LPF);
     79 		strcat (path, "/");
     80 		strcat (path, name);
     81 		if (unlink (path) == -1) {
     82 			perror ("unlink");
     83 			exit (1);
     84 		}
     85 	}
     86 	exit (0);
     87 }
     88