예제 #1
0
파일: util.c 프로젝트: ne0phyte/slidewm
void *util_safe_malloc(int size) {
   void *ptr = calloc(1, size);
   if (!ptr) {
      printf("Error allocating %d bytes\n", size);
      util_quit("Out of memory");
   }
   return ptr;
}
예제 #2
0
int main( int argc, char **argv )
/*******************************/
{
    int         i, ch;
    FILE        *fh;
    int         more_than_one;

    while( (ch = getopt( argc, argv, ":clmw" )) != -1 ) {
        switch( ch ) {
        case 'c':
            char_flag = 1;
            break;
        case 'l':
            line_flag = 1;
            break;
        case 'm':
            char_flag = 1;
            mult_flag = 1;
            break;
        case 'w':
            word_flag = 1;
            break;
        case '?':
            util_quit( usage_text, NULL );
        }
    }
    /* Skip option arguments and argv[0] */
    argc = argc - optind;
    argv += optind;

    if( !word_flag && !line_flag && !char_flag ) {
        word_flag = line_flag = char_flag = 1;
    }
    if( argc == 0 ) {
        do_wc( stdin, NULL );
    } else {
        i = 0;
        more_than_one = 0;
        for( ;; ) {
            fh = fopen( argv[i], "r" );
            if( fh == NULL ) {
                fprintf( stderr, "wc: error opening '%s' for read: %s\n",
                    argv[i], strerror( errno ) );
                return( EXIT_FAILURE );
            }
            do_wc( fh, argv[i] );
            fclose( fh );
            ++i;
            if( i == argc ) break;
            more_than_one = 1;
        }
        if( more_than_one ) {
            print_line( total_lines, total_words, total_chars, "total" );
        }
    }
    return( EXIT_SUCCESS );
}
예제 #3
0
int main( int argc, char **argv )
/*******************************/
{
    int     i, ch;
    char    *env_value;

    env_value = getenv( "PATH" );
    while( (ch = getopt( argc, argv, ":ae:" )) != -1 ) {
        switch( ch ) {
        case 'a':
            find_all = 1;
            break;
        case 'e':
            if( *optarg == '=' ) {
                ++optarg;
            };
            env_value = getenv( optarg );
            break;
        case ':':
            util_quit( usage_text, "which: invalid argument\n" );
        case '?':
            util_quit( usage_text, NULL );
        }
    }

    /* skip option arguments */
    argc = argc - optind + 1;
    argv += optind - 1;

    if( argc < 2 ) {
        util_quit( usage_text, "which: must specify at least 1 filename\n" );
    }

    found_file = 0;
    for( i = 1; i < argc; ++i ) {
        work( env_value, argv[i] );
    }

    return( found_file == 0 );
}
예제 #4
0
int main( int argc, char **argv )
/*******************************/
{
    int         ch;
    int         unbuff_flag = 0;
    int         fh;

    setvbuf( stdin, NULL, _IONBF, 0 );

    while( (ch = getopt( argc, argv, ":u" )) != -1 ) {
        switch( ch ) {
        case 'u':
            unbuff_flag = 1;    /* currently unused */
            break;
        case '?':
            util_quit( usage_text, NULL );
        }
    }
    /* Skip option arguments and argv[0] */
    argc = argc - optind;
    argv += optind;

    setmode( STDOUT_FILENO, O_BINARY );
    if( argc == 0 ) {
        setmode( STDIN_FILENO, O_BINARY );
        do_cat( STDIN_FILENO );
    } else {
        while( *argv != NULL ) {
            fh = open( *argv, O_RDONLY | O_BINARY );
            if( fh == -1 ) {
                fprintf( stderr, "cat: error opening '%s' for read: %s\n",
                         *argv, strerror( errno ) );
                return( EXIT_FAILURE );
            } else {
                do_cat( fh );
                close( fh );
            }
            argv++;
        }
    }
    return( EXIT_SUCCESS );
}