Fix issue #373 - Patch from Milan Crha
authorJulien Kerihuel <j.kerihuel@openchange.org>
Tue, 28 Feb 2012 14:00:56 +0000 (14:00 +0000)
committerJulien Kerihuel <j.kerihuel@openchange.org>
Tue, 28 Feb 2012 14:00:56 +0000 (14:00 +0000)
libmapi/libmapi.h
libmapi/mapi_nameid.c

index 23a157e61feabed58f9a4d01533fa3985416a294..ca5040bd681cb89801e996c9823ba13e0cf5efc6 100644 (file)
@@ -232,7 +232,9 @@ enum MAPISTATUS             mapi_nameid_canonical_add(struct mapi_nameid *, uint32_t);
 enum MAPISTATUS                mapi_nameid_property_lookup(uint32_t);
 enum MAPISTATUS                mapi_nameid_OOM_lookup(const char *, const char *, uint16_t *);
 enum MAPISTATUS                mapi_nameid_lid_lookup(uint16_t, const char *, uint16_t *);
+enum MAPISTATUS                mapi_nameid_lid_lookup_canonical(uint16_t, const char *, uint32_t *);
 enum MAPISTATUS                mapi_nameid_string_lookup(const char *, const char *, uint16_t *);
+enum MAPISTATUS                mapi_nameid_string_lookup_canonical(const char *, const char *, uint32_t *);
 enum MAPISTATUS                mapi_nameid_SPropTagArray(struct mapi_nameid *, struct SPropTagArray *);
 enum MAPISTATUS                mapi_nameid_map_SPropTagArray(struct mapi_nameid *, struct SPropTagArray *, struct SPropTagArray *);
 enum MAPISTATUS                mapi_nameid_unmap_SPropTagArray(struct mapi_nameid *, struct SPropTagArray *);
index d6adb341864b9c5365a90b6c64c0680eddfbe698..cf6edcc5f4c4daa618afa7ff07d3e7c8c21e72eb 100644 (file)
@@ -515,6 +515,43 @@ _PUBLIC_ enum MAPISTATUS mapi_nameid_lid_lookup(uint16_t lid, const char *OLEGUI
 }
 
 
+/**
+   \details Search for a given lid,OLEGUID couple and return the
+   associated canonical propTag.
+
+   \param lid the named property light ID
+   \param OLEGUID the named property GUID for this entry
+   \param propTag pointer on returned named canonical property tag
+
+   \return MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND.
+
+   \note Developers may also call GetLastError() to retrieve the last
+   MAPI error code. Possible MAPI error codes are:
+   - MAPI_E_INVALID_PARAMETER: one of the parameter was not set properly.
+   - MAPI_E_NOT_FOUND: no named property found
+ */
+_PUBLIC_ enum MAPISTATUS mapi_nameid_lid_lookup_canonical(uint16_t lid, const char *OLEGUID,
+                                                         uint32_t *propTag)
+{
+       uint32_t        i;
+
+       /* Sanity checks */
+       OPENCHANGE_RETVAL_IF(!lid, MAPI_E_INVALID_PARAMETER, NULL);
+       OPENCHANGE_RETVAL_IF(!OLEGUID, MAPI_E_INVALID_PARAMETER, NULL);
+       OPENCHANGE_RETVAL_IF(!propTag, MAPI_E_INVALID_PARAMETER, NULL);
+
+       for (i = 0; mapi_nameid_tags[i].OLEGUID; i++) {
+               if (mapi_nameid_tags[i].lid == lid &&
+                   !strcmp(mapi_nameid_tags[i].OLEGUID, OLEGUID)) {
+                       *propTag = mapi_nameid_tags[i].proptag;
+                       return MAPI_E_SUCCESS;
+               }
+       }
+
+       OPENCHANGE_RETVAL_ERR(MAPI_E_NOT_FOUND, NULL);
+}
+
+
 /**
    \details Search for a given Name,OLEGUID couple and return the
    associated propType.
@@ -553,6 +590,45 @@ _PUBLIC_ enum MAPISTATUS mapi_nameid_string_lookup(const char *Name,
 }
 
 
+/**
+   \details Search for a given Name,OLEGUID couple and return the
+   associated canonical propTag.
+
+   \param Name the named property name
+   \param OLEGUID the named property GUID for this entry
+   \param propTag pointer on returned named canonical property tag
+
+   \return MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND.
+
+   \note Developers may also call GetLastError() to retrieve the last
+   MAPI error code. Possible MAPI error codes are:
+   - MAPI_E_INVALID_PARAMETER: one of the parameter was not set properly.
+   - MAPI_E_NOT_FOUND: no named property found
+ */
+_PUBLIC_ enum MAPISTATUS mapi_nameid_string_lookup_canonical(const char *Name, 
+                                                            const char *OLEGUID,
+                                                            uint32_t *propTag)
+{
+       uint32_t        i;
+
+       /* Sanity checks */
+       OPENCHANGE_RETVAL_IF(!Name, MAPI_E_INVALID_PARAMETER, NULL);
+       OPENCHANGE_RETVAL_IF(!OLEGUID, MAPI_E_INVALID_PARAMETER, NULL);
+       OPENCHANGE_RETVAL_IF(!propTag, MAPI_E_INVALID_PARAMETER, NULL);
+
+       for (i = 0; mapi_nameid_tags[i].OLEGUID; i++) {
+               if (mapi_nameid_tags[i].Name &&
+                   !strcmp(mapi_nameid_tags[i].Name, Name) &&
+                   !strcmp(mapi_nameid_tags[i].OLEGUID, OLEGUID)) {
+                       *propTag = mapi_nameid_tags[i].proptag;
+                       return MAPI_E_SUCCESS;
+               }
+       }
+
+       OPENCHANGE_RETVAL_ERR(MAPI_E_NOT_FOUND, NULL);
+}
+
+
 /**
    \details set SPropTagArray ulPropTag property types from
    mapi_nameid returned by GetIDsFromNames()