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 <errno.h>
     17 #include <fcntl.h>
     18 #include <stdio.h>
     19 #include <string.h>
     20 #include <unistd.h>
     21 #include <stdlib.h>
     22 #include <sys/param.h>
     23 #include <sys/stat.h>
     24 
     25 #include "ext2fs/ext2_fs.h"
     26 #include "../version.h"
     27 #include "nls-enable.h"
     28 
     29 #define LPF "lost+found"
     30 
     31 int main (int argc, char ** argv)
     32 {
     33 	char name [EXT2_NAME_LEN];
     34 	char path [sizeof (LPF) + 1 + 256];
     35 	struct stat st;
     36 	int i, j;
     37 	int d;
     38 
     39 #ifdef ENABLE_NLS
     40 	setlocale(LC_MESSAGES, "");
     41 	setlocale(LC_CTYPE, "");
     42 	bindtextdomain(NLS_CAT_NAME, LOCALEDIR);
     43 	textdomain(NLS_CAT_NAME);
     44 #endif
     45 	fprintf (stderr, "mklost+found %s (%s)\n", E2FSPROGS_VERSION,
     46 		 E2FSPROGS_DATE);
     47 	if (argc != 1) {
     48 		(void)argv; /* avoid unused argument warning */
     49 		fprintf (stderr, "%s", _("Usage: mklost+found\n"));
     50 		exit(1);
     51 	}
     52 	if (mkdir (LPF, 0700) == -1) {
     53 		perror ("mkdir");
     54 		exit(1);
     55 	}
     56 
     57 	i = 0;
     58 	memset (name, 'x', 246);
     59 	do {
     60 		sprintf (name + 246, "%08d", i);
     61 		strcpy (path, LPF);
     62 		strcat (path, "/");
     63 		strcat (path, name);
     64 		if ((d = creat (path, 0644)) == -1) {
     65 			perror ("creat");
     66 			exit (1);
     67 		}
     68 		i++;
     69 		close (d);
     70 		if (stat (LPF, &st) == -1) {
     71 			perror ("stat");
     72 			exit (1);
     73 		}
     74 	} while (st.st_size <= (EXT2_NDIR_BLOCKS - 1) * st.st_blksize);
     75 	for (j = 0; j < i; j++) {
     76 		sprintf (name + 246, "%08d", j);
     77 		strcpy (path, LPF);
     78 		strcat (path, "/");
     79 		strcat (path, name);
     80 		if (unlink (path) == -1) {
     81 			perror ("unlink");
     82 			exit (1);
     83 		}
     84 	}
     85 	exit (0);
     86 }
     87