Skip to content

Instantly share code, notes, and snippets.

@copyninja
Created June 8, 2011 09:33
Show Gist options
  • Save copyninja/1014105 to your computer and use it in GitHub Desktop.
Save copyninja/1014105 to your computer and use it in GitHub Desktop.
Trying to reimplement getopt for Fun
/****************************************************************************/
/* Copyright (c) 2011, Vasudev Kamath <[email protected]> */
/* */
/* Permission to use, copy, modify, and/or distribute this software for any */
/* purpose with or without fee is hereby granted, provided that the above */
/* copyright notice and this permission notice appear in all copies. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES */
/* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF */
/* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR */
/* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES */
/* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN */
/* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF */
/* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
/****************************************************************************/
#include "getopt.h"
#include <stdlib.h>
#include <string.h>
Options *getopt(int number, char **arguments){
Options *options = malloc(sizeof(Options));
int i = 0;
int j = 0,k = 0;
char *buffer = NULL;
options->command = arguments[0];
for (i = number-1; i >= 1; i--){
buffer = arguments[i];
if (buffer[0] == '-'){
/* This is option */
options->short_options = realloc(options->short_options,sizeof(char*)*1);
options->short_options[j++] = buffer;
}else {
/* this is argument */
options->other_args = realloc(options->other_args,sizeof(char*)*1);
options->other_args[k++] = buffer;
}
}
return options;
}
int main(int argc, char *argv[])
{
Options *opt = NULL;
/* if(argc < 2){ */
/* fprintf(stderr,"Insufficient Arguments\n"); */
/* exit(1); */
/* } */
opt = getopt(argc,argv);
printf ("Command used %s\n",opt->command);
if(opt->short_options != NULL){
printf ("Options Present\n");
}
if(opt->other_args != NULL){
printf ("Arguments are present\n");
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment