Ignore:
Timestamp:
Nov 4, 2007, 3:16:40 AM (16 years ago)
Author:
Bruno Cornec
Message:

Update to busybox 1.7.2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2.2.5/mindi-busybox/util-linux/fdformat.c

    r821 r1765  
     1/* vi: set sw=4 ts=4: */
    12/* fdformat.c  -  Low-level formats a floppy disk - Werner Almesberger */
    23
     
    910 */
    1011
    11 #include <stdio.h>
    12 #include <string.h>
    13 #include <fcntl.h>
    14 #include <errno.h>
    15 #include <unistd.h>
    16 #include <stdlib.h>
    17 #include <sys/stat.h>
    18 #include <sys/ioctl.h>
    19 #include "busybox.h"
     12#include "libbb.h"
    2013
    2114
     
    5346#define FD_FILL_BYTE 0xF6 /* format fill byte. */
    5447
    55 static void print_and_flush(const char * __restrict format, ...)
    56 {
    57     va_list arg;
    58 
    59     va_start(arg, format);
    60     bb_vfprintf(stdout, format, arg);
    61     va_end(arg);
    62     bb_xfflush_stdout();
    63 }
    64 
    65 static void bb_xioctl(int fd, int request, void *argp, const char *string)
    66 {
    67     if (ioctl (fd, request, argp) < 0) {
    68         bb_perror_msg_and_die(string);
    69     }
    70 }
    71 
     48int fdformat_main(int argc,char **argv);
    7249int fdformat_main(int argc,char **argv)
    7350{
     
    8158        bb_show_usage();
    8259    }
    83     verify = !bb_getopt_ulflags(argc, argv, "n");
     60    verify = !getopt32(argv, "n");
    8461    argv += optind;
    8562
    86     /* R_OK is needed for verifying */
    87     if (stat(*argv,&st) < 0 || access(*argv,W_OK | R_OK ) < 0) {
    88         bb_perror_msg_and_die("%s",*argv);
    89     }
     63    xstat(*argv, &st);
    9064    if (!S_ISBLK(st.st_mode)) {
    91         bb_error_msg_and_die("%s: not a block device",*argv);
     65        bb_error_msg_and_die("%s: not a block device", *argv);
    9266        /* do not test major - perhaps this was an USB floppy */
    9367    }
    9468
     69    /* O_RDWR for formatting and verifying */
     70    fd = xopen(*argv, O_RDWR);
    9571
    96     /* O_RDWR for formatting and verifying */
    97     fd = bb_xopen(*argv,O_RDWR );
     72    /* original message was: "Could not determine current format type" */
     73    xioctl(fd, FDGETPRM, &param);
    9874
    99     bb_xioctl(fd, FDGETPRM, &param, "FDGETPRM");/*original message was: "Could not determine current format type" */
    100 
    101     print_and_flush("%s-sided, %d tracks, %d sec/track. Total capacity %d kB.\n",
     75    printf("%s-sided, %d tracks, %d sec/track. Total capacity %d kB\n",
    10276        (param.head == 2) ? "Double" : "Single",
    10377        param.track, param.sect, param.size >> 1);
    10478
    10579    /* FORMAT */
    106     print_and_flush("Formatting ... ", NULL);
    107     bb_xioctl(fd, FDFMTBEG,NULL,"FDFMTBEG");
     80    printf("Formatting... ");
     81    xioctl(fd, FDFMTBEG, NULL);
    10882
    10983    /* n == track */
    110     for (n = 0; n < param.track; n++)
    111     {
    112         descr.head = 0;
    113         descr.track = n;
    114         bb_xioctl(fd, FDFMTTRK,&descr,"FDFMTTRK");
    115         print_and_flush("%3d\b\b\b", n);
    116         if (param.head == 2) {
    117         descr.head = 1;
    118         bb_xioctl(fd, FDFMTTRK,&descr,"FDFMTTRK");
    119         }
     84    for (n = 0; n < param.track; n++) {
     85        descr.head = 0;
     86        descr.track = n;
     87        xioctl(fd, FDFMTTRK, &descr);
     88        printf("%3d\b\b\b", n);
     89        if (param.head == 2) {
     90            descr.head = 1;
     91            xioctl(fd, FDFMTTRK, &descr);
     92        }
    12093    }
    12194
    122     bb_xioctl(fd,FDFMTEND,NULL,"FDFMTEND");
    123     print_and_flush("done\n", NULL);
     95    xioctl(fd, FDFMTEND, NULL);
     96    printf("done\n");
    12497
    12598    /* VERIFY */
    126     if(verify) {
     99    if (verify) {
    127100        /* n == cyl_size */
    128101        n = param.sect*param.head*512;
    129102
    130103        data = xmalloc(n);
    131         print_and_flush("Verifying ... ", NULL);
     104        printf("Verifying... ");
    132105        for (cyl = 0; cyl < param.track; cyl++) {
    133             print_and_flush("%3d\b\b\b", cyl);
    134             if((read_bytes = safe_read(fd,data,n))!= n ) {
    135                 if(read_bytes < 0) {
     106            printf("%3d\b\b\b", cyl);
     107            read_bytes = safe_read(fd, data, n);
     108            if (read_bytes != n) {
     109                if (read_bytes < 0) {
    136110                    bb_perror_msg(bb_msg_read_error);
    137111                }
    138                 bb_error_msg_and_die("Problem reading cylinder %d, expected %d, read %d", cyl, n, read_bytes);
     112                bb_error_msg_and_die("problem reading cylinder %d, "
     113                    "expected %d, read %d", cyl, n, read_bytes);
     114                // FIXME: maybe better seek & continue??
    139115            }
    140116            /* Check backwards so we don't need a counter */
    141             while(--read_bytes>=0) {
    142                 if( data[read_bytes] != FD_FILL_BYTE) {
    143                      print_and_flush("bad data in cyl %d\nContinuing ... ",cyl);
     117            while (--read_bytes >= 0) {
     118                if (data[read_bytes] != FD_FILL_BYTE) {
     119                     printf("bad data in cyl %d\nContinuing... ",cyl);
    144120                }
    145121            }
     
    151127        if (ENABLE_FEATURE_CLEAN_UP) free(data);
    152128
    153         print_and_flush("done\n", NULL);
     129        printf("done\n");
    154130    }
    155131
Note: See TracChangeset for help on using the changeset viewer.