Commit c2dc7d9c authored by Patrick Monnerat's avatar Patrick Monnerat
Browse files

os400: implement mime api EBCDIC wrappers

Also sync ILE/RPG binding to define the new functions.
parent 050c93c4
Loading
Loading
Loading
Loading
+77 −0
Original line number Diff line number Diff line
@@ -1345,3 +1345,80 @@ curl_pushheader_byname_ccsid(struct curl_pushheaders *h, const char *header,

  return d;
}

static CURLcode
mime_string_call(curl_mimepart *part, const char *string, unsigned int ccsid,
                 CURLcode (*mimefunc)(curl_mimepart *part, const char *string))

{
  char *s = (char *) NULL;
  CURLcode result;

  if(!string)
    return mimefunc(part, string);
  s = dynconvert(ASCII_CCSID, string, -1, ccsid);
  if(!s)
    return CURLE_OUT_OF_MEMORY;

  result = mimefunc(part, s);
  free(s);
  return result;
}

CURLcode
curl_mime_name_ccsid(curl_mimepart *part, const char *name, unsigned int ccsid)

{
  return mime_string_call(part, name, ccsid, curl_mime_name);
}

CURLcode
curl_mime_filename_ccsid(curl_mimepart *part,
                         const char *filename, unsigned int ccsid)

{
  return mime_string_call(part, filename, ccsid, curl_mime_filename);
}

CURLcode
curl_mime_type_ccsid(curl_mimepart *part,
                     const char *mimetype, unsigned int ccsid)

{
  return mime_string_call(part, mimetype, ccsid, curl_mime_type);
}

CURLcode
curl_mime_encoder_ccsid(curl_mimepart *part,
                       const char *encoding, unsigned int ccsid)

{
  return mime_string_call(part, encoding, ccsid, curl_mime_encoder);
}

CURLcode
curl_mime_filedata_ccsid(curl_mimepart *part,
                         const char *filename, unsigned int ccsid)

{
  return mime_string_call(part, filename, ccsid, curl_mime_filedata);
}

CURLcode
curl_mime_data_ccsid(curl_mimepart *part,
                     const char *data, size_t datasize, unsigned int ccsid)

{
  char *s = (char *) NULL;
  CURLcode result;

  if(!data)
    return curl_mime_data(part, data, datasize);
  s = dynconvert(ASCII_CCSID, data, datasize, ccsid);
  if(!s)
    return CURLE_OUT_OF_MEMORY;

  result = curl_mime_data(part, s, datasize);
  free(s);
  return result;
}
+19 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
@@ -67,5 +67,23 @@ CURL_EXTERN char *curl_pushheader_byname_ccsid(struct curl_pushheaders *h,
                                               const char *header,
                                               unsigned int ccsidin,
                                               unsigned int ccsidout);
CURL_EXTERN CURLcode curl_mime_name_ccsid(curl_mimepart *part,
                                          const char *name,
                                          unsigned int ccsid);
CURL_EXTERN CURLcode curl_mime_filename_ccsid(curl_mimepart *part,
                                              const char *filename,
                                              unsigned int ccsid);
CURL_EXTERN CURLcode curl_mime_type_ccsid(curl_mimepart *part,
                                          const char *mimetype,
                                          unsigned int ccsid);
CURL_EXTERN CURLcode curl_mime_encoder_ccsid(curl_mimepart *part,
                                             const char *encoding,
                                             unsigned int ccsid);
CURL_EXTERN CURLcode curl_mime_filedata_ccsid(curl_mimepart *part,
                                              const char *filename,
                                              unsigned int ccsid);
CURL_EXTERN CURLcode curl_mime_data_ccsid(curl_mimepart *part,
                                          const char *data, size_t datasize,
                                          unsigned int ccsid);

#endif
+114 −0
Original line number Diff line number Diff line
@@ -291,6 +291,9 @@
     d CURL_REDIR_POST_ALL...
     d                 c                   7
      *
     d CURL_ZERO_TERMINATED...
     d                 c                   -1
      *
     d CURL_POLL_NONE  c                   0
     d CURL_POLL_IN    c                   1
     d CURL_POLL_OUT   c                   2
@@ -1981,6 +1984,74 @@
      *                              Prototypes
      **************************************************************************
      *
     d curl_mime_init  pr              *   extproc('curl_mime_init')            curl_mime *
     d  easy                           *   value                                CURL *
      *
     d curl_mime_free  pr                  extproc('curl_mime_free')
     d  mime                           *   value                                curl_mime *
      *
     d curl_mime_addpart...
     d                 pr              *   extproc('curl_mime_addpart')         curl_mimepart *
     d  mime                           *   value                                curl_mime *
      *
     d curl_mime_name  pr                  extproc('curl_mime_name')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  name                           *   value options(*string)
      *
     d curl_mime_filename...
     d                 pr                  extproc('curl_mime_filename')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  filename                       *   value options(*string)
      *
     d curl_mime_type  pr                  extproc('curl_mime_type')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  mimetype                       *   value options(*string)
      *
     d curl_mime_encoder...
     d                 pr                  extproc('curl_mime_encoder')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  encoding                       *   value options(*string)
      *
     d curl_mime_data  pr                  extproc('curl_mime_data')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  data                           *   value options(*string)
     d  datasize                     10u 0                                      size_t
      *
     d curl_mime_filedata...
     d                 pr                  extproc('curl_mime_filedata')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  filename                       *   value options(*string)
      *
     d curl_mime_data_cb...
     d                 pr                  extproc('curl_mime_data_cb')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  datasize                           value like(curl_off_t)
     d  readfunc                           value like(curl_read_callback)
     d  seekfunc                           value like(curl_seek_callback)
     d  freefunc                           value like(curl_free_callback)
     d  arg                            *   value                                void *
      *
     d curl_mime_subparts...
     d                 pr                  extproc('curl_mime_subparts')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  subparts                       *   value                                curl_mime *
      *
     d curl_mime_headers...
     d                 pr                  extproc('curl_mime_headers')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  headers                        *   value                                curl_slist *
     d  take_ownership...
     d                               10i 0 value
      *
      *  This procedure as a variable parameter list.
      *  This prototype allows use of an option array, or a single "object"
      *    option. Other argument lists may be implemented by alias procedure
@@ -2466,4 +2537,47 @@
     d  ccsidin                      10u 0 value
     d  ccsidout                     10u 0 value
      *
     d curl_mime_name_ccsid...
     d                 pr                  extproc('curl_mime_name_ccsid')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  name                           *   value options(*string)
     d  ccsid                        10u 0 value
      *
     d curl_mime_filename_ccsid...
     d                 pr                  extproc('curl_mime_filename_ccsid')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  filename                       *   value options(*string)
     d  ccsid                        10u 0 value
      *
     d curl_mime_type_ccsid...
     d                 pr                  extproc('curl_mime_type_ccsid')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  mimetype                       *   value options(*string)
     d  ccsid                        10u 0 value
      *
     d curl_mime_encoder_ccsid...
     d                 pr                  extproc('curl_mime_encoder_ccsid')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  encoding                       *   value options(*string)
     d  ccsid                        10u 0 value
      *
     d curl_mime_data_ccsid...
     d                 pr                  extproc('curl_mime_data_ccsid')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  data                           *   value options(*string)
     d  datasize                     10u 0                                      size_t
     d  ccsid                        10u 0 value
      *
     d curl_mime_filedata_ccsid...
     d                 pr                  extproc('curl_mime_filedata_ccsid')
     d                                     like(CURLcode)
     d  part                           *   value                                curl_mimepart *
     d  filename                       *   value options(*string)
     d  ccsid                        10u 0 value
      *
      /endif