119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * mklost+found.c - Creates a directory lost+found on a mounted second 319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * extended file system 419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * 519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Copyright (C) 1992, 1993 Remy Card <card@masi.ibp.fr> 619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * 719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * This file can be redistributed under the terms of the GNU General 819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Public License 919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* 1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * History: 1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * 93/04/22 - Creation 1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */ 1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <errno.h> 1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <fcntl.h> 1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdio.h> 1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <string.h> 2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <unistd.h> 2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdlib.h> 2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <sys/param.h> 2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <sys/stat.h> 2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "ext2fs/ext2_fs.h" 2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "../version.h" 2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include "nls-enable.h" 2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define LPF "lost+found" 3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectint main (int argc, char ** argv) 3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char name [EXT2_NAME_LEN]; 3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project char path [sizeof (LPF) + 1 + 256]; 3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project struct stat st; 3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int i, j; 3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project int d; 3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project 3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef ENABLE_NLS 4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project setlocale(LC_MESSAGES, ""); 4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project setlocale(LC_CTYPE, ""); 4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project bindtextdomain(NLS_CAT_NAME, LOCALEDIR); 4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project textdomain(NLS_CAT_NAME); 4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif 4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fprintf (stderr, "mklost+found %s (%s)\n", E2FSPROGS_VERSION, 4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project E2FSPROGS_DATE); 4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (argc != 1) { 4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project (void)argv; /* avoid unused argument warning */ 4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project fprintf (stderr, _("Usage: mklost+found\n")); 5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project exit(1); 5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (mkdir (LPF, 0700) == -1) { 5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project perror ("mkdir"); 5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project exit(1); 5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 563984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt 5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project i = 0; 5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project memset (name, 'x', 246); 5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project do { 6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project sprintf (name + 246, "%08d", i); 6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project strcpy (path, LPF); 6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project strcat (path, "/"); 6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project strcat (path, name); 6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if ((d = creat (path, 0644)) == -1) { 6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project perror ("creat"); 6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project exit (1); 6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project i++; 6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project close (d); 7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (stat (LPF, &st) == -1) { 7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project perror ("stat"); 7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project exit (1); 7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } while (st.st_size <= (EXT2_NDIR_BLOCKS - 1) * st.st_blksize); 7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project for (j = 0; j < i; j++) { 7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project sprintf (name + 246, "%08d", j); 7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project strcpy (path, LPF); 7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project strcat (path, "/"); 7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project strcat (path, name); 8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project if (unlink (path) == -1) { 8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project perror ("unlink"); 8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project exit (1); 8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project } 8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project exit (0); 8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project} 87