Skip to content
Snippets Groups Projects
main.c 89.4 KiB
Newer Older
  • Learn to ignore specific revisions
  •   struct Configurable config;
    
      memset(&config, 0, sizeof(struct Configurable));
      
    
      res = operate(&config, argc, argv);
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    #ifdef	VMS
    
      if (res > 52) res = 53;		/* MAXMSG, porting helper */
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
      return (vms_cond[res]|vms_show);
    #else
    
      return res;
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    #endif
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
    }
    
    
    static char *my_get_line(FILE *fp)
    {
       char buf[4096];
       char *nl = NULL;
       char *retval = NULL;
    
       do
       {
          if (NULL == fgets(buf, sizeof(buf), fp))
             break;
          if (NULL == retval)
             retval = strdup(buf);
          else
          {
             if (NULL == (retval = realloc(retval,
                                           strlen(retval) + strlen(buf) + 1)))
                break;
             strcat(retval, buf);
          }
       }
       while (NULL == (nl = strchr(retval, '\n')));
    
       if (NULL != nl)
         *nl = '\0';
    
       return retval;
    }
    
    
    
    /* Create the needed directory hierarchy recursively in order to save
       multi-GETs in file output, ie:
       curl "http://my.site/dir[1-5]/file[1-5].txt" -o "dir#1/file#2.txt"
       should create all the dir* automagically
    */
    static int create_dir_hierarchy(char *outfile)
    {
      char *tempdir;
      char *tempdir2;
      char *outdup;
      char *dirbuildup;
      int result=0;
      
      outdup = strdup(outfile);
      dirbuildup = malloc(sizeof(char) * strlen(outfile));
    
      if(!dirbuildup)
        return -1;
      dirbuildup[0] = '\0';
    
    
      tempdir = strtok(outdup, DIR_CHAR);
    
      while (tempdir != NULL) {
        tempdir2 = strtok(NULL, DIR_CHAR);
        /* since strtok returns a token for the last word even
           if not ending with DIR_CHAR, we need to prune it */
        if (tempdir2 != NULL) {
          if (strlen(dirbuildup) > 0)
            sprintf(dirbuildup,"%s%s%s",dirbuildup, DIR_CHAR, tempdir);
          else {
    
            if (0 != strncmp(outdup, DIR_CHAR, 1))
    
              sprintf(dirbuildup,"%s",tempdir);
            else
              sprintf(dirbuildup,"%s%s", DIR_CHAR, tempdir);
          }
    
    Daniel Stenberg's avatar
    Daniel Stenberg committed
          if (access(dirbuildup, F_OK) == -1) {
    
            result = mkdir(dirbuildup,(mode_t)0000750);
            if (-1 == result) {
              switch (errno) {
    #ifdef EACCES
              case EACCES:
                fprintf(stderr,"You don't have permission to create %s.\n",
                        dirbuildup);
                break;
    #endif
    #ifdef ENAMETOOLONG
              case ENAMETOOLONG:
                fprintf(stderr,"The directory name %s is too long.\n",
                        dirbuildup);
                break;
    #endif
    #ifdef EROFS
              case EROFS:
                fprintf(stderr,"%s resides on a read-only file system.\n",
                        dirbuildup);
                break;
    #endif
    #ifdef ENOSPC
              case ENOSPC:
                fprintf(stderr,"No space left on the file system that will "
                        "contain the directory %s.\n", dirbuildup);
                break;
    #endif
    #ifdef EDQUOT
              case EDQUOT:
                fprintf(stderr,"Cannot create directory %s because you "
                        "exceeded your quota.\n", dirbuildup);
                break;
    #endif
              default :
                fprintf(stderr,"Error creating directory %s.\n", dirbuildup);
                break;
              }
              break; /* get out of loop */
            }
          }
        }
        tempdir = tempdir2;
      }
      free(dirbuildup);
      free(outdup);
    
      return result; /* 0 is fine, -1 is badness */
    }